예제 #1
0
from Component_py.stubs import require, console, __pragma__  # __:skip
from Component_py.component import Component
from components.AlbumDetail import AlbumDetail

React = require("react")
ScrollView = require("react-native").ScrollView

__pragma__("skip")


def fetch(s):
    return None


__pragma__("noskip")


class AlbumList(Component):
    def __init__(self, props):
        super().__init__(props)
        self.state = {"albums": []}

    def componentDidMount(self):
        def parse(response):
            return response.json()

        def resolve(data):
            self.setState({"albums": data})

        def reject(error):
            console.log(error)
예제 #2
0
from Component_py.stubs import require, __pragma__  # __:skip
from Component_py.component import destruct

React = require("react")
Text, View = destruct(require("react-native"), "Text", "View")


def Header(props):
    view_style, text_style = styles.values()
    return __pragma__(
        "js", "{}", """ (
        <View style={view_style}>
            <Text style={text_style}>{props.header_text}</Text>
        </View>
    ); """)


styles = _s = {
    "viewStyle": {
        "backgroundColor": "#F8F8F8",
        "justifyContent": "center",
        "alignItems": "center",
        "height": 80,
        "paddingTop": 25,
        "shadowColor": "#000",
        "shadowOffset": {
            "width": 0,
            "height": 2
        },
        "shadowOpacity": 0.2,
        "elevation": 2,
예제 #3
0
파일: index.py 프로젝트: ylwb/Component.py
from Component_py.stubs import __pragma__, require, document  # __:skip
from app import App

React = require("react")
ReactDOM = require("react-dom")

app = __pragma__("xtrans", None, "{}", "<App />")
ReactDOM.render(app, document.getElementById("root"))
예제 #4
0
from Component_py.stubs import require  # __:skip
from actions.types import FETCH_USERS, SET_USER
axios = require("axios")


def fetch_users():
    return {
        "type": FETCH_USERS,
        "payload": axios.js_get("https://randomuser.me/api/?results=10")
    }


def set_user(user):
    return {"type": SET_USER, "payload": user}
from Component_py.stubs import require, __pragma__  # __:skip
React = require("react")
Link = require("react-router").Link

def UserItem(props):
    thumbnail = props.user.picture.thumbnail
    username = props.user.login.username
    to_path = f"/user:{username}"

    return __pragma__("xtrans", None, "{}", """ (
        <Link
            className="box"
            onClick={props.onClick}
            to={to_path}
        >
            <img src={thumbnail} />
            <span>{username}</span>
        </Link>
    ); """)
예제 #6
0
from Component_py.stubs import require, __pragma__  # __:skip
React = require("react")
View = require("react-native").View


def Card(props):
    container_style, = styles.values()
    return __pragma__(
        "js", "{}", """ (
        <View style={container_style}>
            {props.children}
        </View>
    ); """)


styles = {
    "containerStyle": {
        "borderWidth": 1,
        "borderRadius": 2,
        "borderColor": "#DDD",
        "borderBottomWidth": 0,
        "shadowColor": "#000",
        "shadowOffset": {
            "width": 0,
            "height": 2
        },
        "shadowOpacity": 0.1,
        "shadowRadius": 2,
        "elevation": 1,
        "marginLeft": 5,
        "marginRight": 5,
예제 #7
0
from Component_py.stubs import require, __pragma__  # __:skip
from Component_py.component import destruct

from reducers.todo_list import todo_list_reducer
from reducers.login_user import login_user_reducer
from reducers.login_form import login_form_reducer
from reducers.form_panel import form_panel_reducer

createStore, combineReducers, applyMiddleware = destruct(
    require("redux"), "createStore", "combineReducers", "applyMiddleware")

logger = require("redux-logger").createLogger
promise = require("redux-promise-middleware").js_default
thunk = require("redux-thunk").js_default

store = createStore(
    combineReducers({
        "todo_list": todo_list_reducer,
        "login_user": login_user_reducer,
        "login_form": login_form_reducer,
        "form_panel": form_panel_reducer
    }),
    applyMiddleware(
        thunk,
        promise(),
        logger()
    )
)
from Component_py.stubs import require, __pragma__, document  # __:skip
from containers.AppContainer import AppContainer
from store import store

React = require("react")
ReactDOM = require("react-dom")
Provider = require("react-redux").Provider

app = __pragma__("xtrans", None, "{}", """ (
    <Provider store={store}>
        <AppContainer />
    </Provider>
); """)
ReactDOM.render(app, document.getElementById("root"))
예제 #9
0
from Component_py.stubs import require, __pragma__  # __:skip
from Component_py.component import destruct

React = require("react")
Form, FormGroup, Label, Input, Button = destruct(require("reactstrap"), "Form",
                                                 "FormGroup", "Label", "Input",
                                                 "Button")


def LoginForm(props):
    def on_input_change(e):
        props.login_form_update(e.target.id, e.target.value)

    def on_submit_login(e):
        username, password = destruct(props["login_form"], "username_text",
                                      "password_text")
        if username and password:
            props.clear_login_form()
            props.login_user(username, password)
        e.preventDefault()

    def on_click_register(e):
        username, password = destruct(props["login_form"], "username_text",
                                      "password_text")
        if username and password:
            props.clear_login_form()
            props.register_user(username, password)

    return __pragma__(
        "xtrans", None, "{}", """ (
        <Form className="padding" onSubmit={on_submit_login}>
예제 #10
0
from Component_py.stubs import require, __pragma__  # __:skip
from Component_py.component import destruct
from reducers.users import users_reducer
from reducers.user_profile import user_profile_reducer

createStore, combineReducers, applyMiddleware = \
    destruct(require("redux"),
             "createStore", "combineReducers", "applyMiddleware")

logger = require("redux-logger").createLogger
promise = require("redux-promise-middleware").js_default

users_store = createStore(
    combineReducers({
        "users": users_reducer,
        "user_profile": user_profile_reducer
    }), applyMiddleware(logger(), promise()))
예제 #11
0
from Component_py.stubs import require, __pragma__  # __:skip
from Component_py.component import destruct
from containers.LoginFormContainer import LoginFormContainer
from containers.FormPanelContainer import FormPanelContainer
from containers.ButtonPanelContainer import ButtonPanelContainer
from containers.TodoListContainer import TodoListContainer

React = require("react")
Form, Row, Col, Jumbotron = destruct(
    require("reactstrap"), "Form", "Row", "Col", "Jumbotron")


def App(props):
    def render_login_panel():
        return __pragma__("xtrans", None, "{}", """ (
            <div>
                <h5>Please Login:</h5>
                <LoginFormContainer />
            </div>
        ); """)

    def on_submit(e):
        e.preventDefault()

    def render_todo_panel():
        return __pragma__("xtrans", None, "{}", """ (
            <div>
                <TodoListContainer />
                <Form
                    className="padding"
                    onSubmit={on_submit}
예제 #12
0
from Component_py.stubs import require, __pragma__  # __:skip
from Component_py.component import destruct
React = require("react")
Text, TouchableOpacity = \
    destruct(require("react-native"), "Text", "TouchableOpacity")


def Button(props):
    button_style, text_style = styles.values()
    return __pragma__("js", "{}", """ (
        <TouchableOpacity
            style={button_style}
            onPress={props.onPress}>
            <Text style={text_style}>
                {props.children}
            </Text>
        </TouchableOpacity>
    ); """)


styles = {
    "buttonStyle": {
        "flex": 1,
        "alignSelf": "stretch",
        "backgroundColor": "#FFF",
        "borderRadius": 5,
        "borderWidth": 1,
        "borderColor": "#007AFF",
        "marginLeft": 5,
        "marginRight": 5
    },
from Component_py.stubs import require, __pragma__  # __:skip
React = require("react")
Button = require("reactstrap").Button


def ButtonPanel(props):
    def on_click_add():
        todo_text = props.form_panel["text"]
        token = props.login_user["token"]
        if todo_text:
            props.add_new_todo(todo_text, token)
            props.form_panel_update("")

    def on_click_clear():
        todo_text = props.form_panel["text"]
        if todo_text:
            props.form_panel_update("")

    def on_click_logout():
        on_click_clear()
        props.logout_user()

    return __pragma__(
        "xtrans", None, "{}", """ (
        <div className="flex-center">
            <div className="flex-container">
                <Button
                    className="fixed-height"
                    onClick={on_click_add}
                    color="success"
                    type="submit"
예제 #14
0
from Component_py.stubs import require, __pragma__  # __:skip
from components.navbar import Navbar
React = require("react")

def App(props):
    return __pragma__("xtrans", None, "{}", """ (
        <div className="appComp">
            <Navbar />
            <div>
                <h1>This is our App component</h1>
                {props.children}
            </div>
        </div>
    ); """)
from Component_py.stubs import require  # __:skip
from actions.actions import fetch_all_todos, complete_todo, delete_todo
from components.TodoList import TodoList
connect = require("react-redux").connect


def mapStateToProps(state):
    return {
        "todo_list": state["todo_list"],
        "login_user": state["login_user"]
    }


def mapDispatchToProps(dispatch):
    return {
        "fetch_all_todos": lambda t: dispatch(fetch_all_todos(t)),
        "complete_todo": lambda i, t: dispatch(complete_todo(i, t)),
        "delete_todo": lambda i, t: dispatch(delete_todo(i, t))
    }


TodoListContainer = connect(
    mapStateToProps,
    mapDispatchToProps
)(TodoList)
예제 #16
0
from Component_py.stubs import require, __pragma__, window  # __:skip
from Component_py.component import Component, destruct

React = require("react")
ListGroup, ListGroupItem, Button = destruct(require("reactstrap"), "ListGroup",
                                            "ListGroupItem", "Button")
RingLoader = require("react-spinners").RingLoader
FontAwesomeIcon = require("react-fontawesome")


class TodoList(Component):
    def componentDidMount(self):
        token = self.props.login_user["token"]
        self.props.fetch_all_todos(token)

    def on_click_complete(self, todo):
        token = self.props.login_user["token"]

        def closure():
            if not todo["complete"]:
                self.props.complete_todo(todo["id"], token)

        return closure

    def on_click_delete(self, todo):
        token = self.props.login_user["token"]

        def closure():
            should_delete = True
            if not todo["complete"] and not window.confirm(
                    "Delete incomplete Todo?"):
from Component_py.stubs import require, console  # __:skip
from actions.types import (
    FETCH_ALL_TODOS, COMPLETE_TODO, DELETE_TODO, ADD_NEW_TODO,
    REGISTER_USER, REGISTER_USER_REJECTED, LOGIN_USER, LOGOUT_USER,
    FORM_PANEL_UPDATE, LOGIN_FORM_UPDATE, CLEAR_LOGIN_FORM
)
axios = require("axios").create({"baseURL": "https://metamarcdw.pythonanywhere.com"})


def bearer(token):
    return {
        "headers": {
            "Authorization": f"Bearer {token}"
        }
    }


def fetch_all_todos(token):
    return {
        "type": FETCH_ALL_TODOS,
        "payload": axios.js_get("/todo", bearer(token))
    }


def complete_todo(id_, token):
    return {
        "type": COMPLETE_TODO,
        "payload": axios.put(f"/todo/{id_}", None, bearer(token))
    }

from Component_py.stubs import require, __pragma__  # __:skip
from Component_py.component import destruct

React = require("react")
FormGroup, Label, Input = destruct(require("reactstrap"), "FormGroup", "Label",
                                   "Input")


def FormPanel(props):
    def on_text_change(e):
        props.form_panel_update(e.target.value)

    return __pragma__(
        "xtrans", None, "{}", """ (
        <FormGroup>
            <Label for="text_input">Enter new todo text:</Label>
            <Input
                onChange={on_text_change}
                value={props.form_panel.text}
                id="text_input"
                placeholder="What to do?" />
        </FormGroup>
    ); """)
예제 #19
0
from Component_py.stubs import require, console, __pragma__  # __:skip
from Component_py.component import destruct
from components.Card import Card
from components.CardSection import CardSection
from components.Button import Button

React = require("react")
View, Text, Image, Linking = \
    destruct(require("react-native"), "View", "Text", "Image", "Linking")


def AlbumDetail(props):
    artist, image, thumbnail_image, title, url = \
        destruct(props.album,
                 "artist", "image", "thumbnail_image", "title", "url")
    (header_content_style, header_text_style, thumbnail_style,
     thumbnail_container_style, image_style) = styles.values()

    def on_press():
        return Linking.openURL(url)

    return __pragma__(
        "js", "{}", """ (
        <Card>
            <CardSection>
                <View style={thumbnail_container_style}>
                    <Image
                        source={{ "uri": thumbnail_image }}
                        style={thumbnail_style} />
                </View>
                <View style={header_content_style}>