zmp-cli 3.15.7 → 3.15.9
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +97 -1
- package/build/index.js +1 -1
- package/config/index.js +1 -1
- package/create/index.js +1 -1
- package/create/utils/generate-app-config.js +1 -1
- package/create/utils/generate-npm-scripts.js +1 -1
- package/create/utils/get-options.js +1 -1
- package/create/utils/npm-scripts.js +1 -1
- package/deploy/index.js +1 -1
- package/deploy/utils/get-options.js +1 -1
- package/deploy/utils/request-upload.js +1 -1
- package/deploy/utils/upload-app.js +1 -1
- package/index.js +1 -1
- package/login/index.js +1 -1
- package/login/utils/get-options.js +1 -1
- package/login/utils/zalo-login.js +1 -1
- package/migrate/icons/update-icon-v3.js +1 -1
- package/migrate/index.js +1 -1
- package/migrate/utils/get-options.js +1 -1
- package/migrate/utils/migrate-react.js +1 -1
- package/package.json +3 -2
- package/start/frame/index.html +264 -254
- package/start/index.js +1 -1
- package/sync/index-to-app-config.js +1 -1
- package/sync/index.js +1 -1
- package/utils/axios.js +1 -1
- package/utils/check-update.js +1 -1
- package/utils/constants.js +1 -1
- package/utils/env.js +1 -1
- package/utils/error.js +1 -1
- package/utils/find-files-by-ext.js +1 -1
- package/utils/find-free-port.js +1 -1
- package/utils/fs-extra.js +1 -1
- package/utils/generate-pages-map.js +1 -1
- package/utils/get-app-info.js +1 -1
- package/utils/get-current-project.js +1 -1
- package/utils/get-ip.js +1 -1
- package/utils/log.js +1 -1
- package/utils/node-blob.js +1 -1
- package/utils/resumable.d.js +1 -1
- package/utils/resumable.js +1 -1
- package/utils/spinner.js +1 -1
- package/utils/tunnel.js +1 -1
- package/create/init-zmp-ui.js +0 -1
- package/create/templates/app-parameters.js +0 -17
- package/create/templates/common/css/icons.css +0 -60
- package/create/templates/common/icons/512x512.png +0 -0
- package/create/templates/common/icons/apple-touch-icon.png +0 -0
- package/create/templates/common/icons/favicon.png +0 -0
- package/create/templates/common/postcss.config.js +0 -5
- package/create/templates/common/splash-2732x2732.png +0 -0
- package/create/templates/common/tailwind/postcss.config.js +0 -5
- package/create/templates/common/tailwind/tailwind.config.js +0 -9
- package/create/templates/common/tailwind/tailwind.css +0 -3
- package/create/templates/common/webpack/build.js +0 -3
- package/create/templates/copy-assets.js +0 -1
- package/create/templates/core/babel.config.js +0 -11
- package/create/templates/core/copy-assets.js +0 -15
- package/create/templates/core/generate-home-page.js +0 -121
- package/create/templates/core/generate-root.js +0 -248
- package/create/templates/core/generate-routes.js +0 -129
- package/create/templates/core/generate-scripts.js +0 -45
- package/create/templates/core/pages/404.html +0 -20
- package/create/templates/core/pages/about.html +0 -26
- package/create/templates/core/pages/catalog.html +0 -40
- package/create/templates/core/pages/dynamic-route.html +0 -115
- package/create/templates/core/pages/form.html +0 -258
- package/create/templates/core/pages/left-page-1.html +0 -24
- package/create/templates/core/pages/left-page-2.html +0 -23
- package/create/templates/core/pages/product.html +0 -36
- package/create/templates/core/pages/request-and-load.html +0 -35
- package/create/templates/core/pages/settings.html +0 -252
- package/create/templates/create-folders.js +0 -1
- package/create/templates/generate-config-xml.js +0 -11
- package/create/templates/generate-index.js +0 -24
- package/create/templates/generate-manifest.js +0 -1
- package/create/templates/generate-recoil.js +0 -44
- package/create/templates/generate-routes.js +0 -1
- package/create/templates/generate-scripts.js +0 -1
- package/create/templates/generate-service-worker.js +0 -120
- package/create/templates/generate-store.js +0 -77
- package/create/templates/generate-styles.js +0 -56
- package/create/templates/generate-webpack-config.js +0 -253
- package/create/templates/generate-zmp-custom.js +0 -23
- package/create/templates/react/babel.config.js +0 -12
- package/create/templates/react/components/app-items.jsx +0 -44
- package/create/templates/react/components/navbar-back.jsx +0 -25
- package/create/templates/react/components/user-card.jsx +0 -18
- package/create/templates/react/copy-assets.js +0 -1
- package/create/templates/react/generate-home-page.js +0 -81
- package/create/templates/react/generate-root.js +0 -55
- package/create/templates/react/generate-routes.js +0 -1
- package/create/templates/react/generate-scripts.js +0 -42
- package/create/templates/react/pages/404.js +0 -19
- package/create/templates/react/pages/about.js +0 -44
- package/create/templates/react/pages/catalog.js +0 -98
- package/create/templates/react/pages/dynamic-route.js +0 -72
- package/create/templates/react/pages/form.js +0 -132
- package/create/templates/react/pages/index copy.js +0 -1
- package/create/templates/react/pages/index.js +0 -1
- package/create/templates/react/pages/settings.js +0 -62
- package/create/templates/react/pages/user.js +0 -37
- package/create/templates/react/vite.config.js +0 -11
- package/create/templates/react-typescript/_tsconfig.json +0 -33
- package/create/templates/react-typescript/components/app-items.js +0 -46
- package/create/templates/react-typescript/components/index.js +0 -1
- package/create/templates/react-typescript/components/navbar-back.js +0 -33
- package/create/templates/react-typescript/components/user-card.js +0 -25
- package/create/templates/react-typescript/copy-assets.js +0 -1
- package/create/templates/react-typescript/generate-home-page.js +0 -81
- package/create/templates/react-typescript/generate-root.js +0 -50
- package/create/templates/react-typescript/generate-routes.js +0 -1
- package/create/templates/react-typescript/generate-scripts.js +0 -42
- package/create/templates/react-typescript/pages/404.js +0 -19
- package/create/templates/react-typescript/pages/about.js +0 -44
- package/create/templates/react-typescript/pages/catalog.js +0 -98
- package/create/templates/react-typescript/pages/dynamic-route.js +0 -72
- package/create/templates/react-typescript/pages/form.js +0 -132
- package/create/templates/react-typescript/pages/index.js +0 -1
- package/create/templates/react-typescript/pages/settings.js +0 -62
- package/create/templates/react-typescript/pages/user.js +0 -37
- package/create/templates/react-typescript/vite.config.js +0 -21
- package/create/templates/svelte/babel.config.js +0 -10
- package/create/templates/svelte/copy-assets.js +0 -1
- package/create/templates/svelte/generate-home-page.js +0 -122
- package/create/templates/svelte/generate-root.js +0 -177
- package/create/templates/svelte/generate-routes.js +0 -76
- package/create/templates/svelte/generate-scripts.js +0 -31
- package/create/templates/svelte/pages/404.svelte +0 -10
- package/create/templates/svelte/pages/about.svelte +0 -16
- package/create/templates/svelte/pages/catalog.svelte +0 -31
- package/create/templates/svelte/pages/dynamic-route.svelte +0 -34
- package/create/templates/svelte/pages/form.svelte +0 -175
- package/create/templates/svelte/pages/left-page-1.svelte +0 -13
- package/create/templates/svelte/pages/left-page-2.svelte +0 -12
- package/create/templates/svelte/pages/product.svelte +0 -21
- package/create/templates/svelte/pages/request-and-load.svelte +0 -21
- package/create/templates/svelte/pages/settings.svelte +0 -175
- package/create/templates/vue/babel.config.js +0 -10
- package/create/templates/vue/components/header.vue +0 -28
- package/create/templates/vue/components/sun-and-moon.vue +0 -34
- package/create/templates/vue/copy-assets.js +0 -1
- package/create/templates/vue/generate-home-page.js +0 -50
- package/create/templates/vue/generate-root.js +0 -40
- package/create/templates/vue/generate-routes.js +0 -1
- package/create/templates/vue/generate-scripts.js +0 -46
- package/create/templates/vue/global-components.d.js +0 -1
- package/create/templates/vue/global-components.d.ts +0 -121
- package/create/templates/vue/icons/moon.svg +0 -3
- package/create/templates/vue/icons/sun.svg +0 -3
- package/create/templates/vue/pages/404.vue +0 -12
- package/create/templates/vue/pages/about.vue +0 -15
- package/create/templates/vue/pages/catalog.vue +0 -39
- package/create/templates/vue/pages/dynamic-route.vue +0 -34
- package/create/templates/vue/pages/form.vue +0 -162
- package/create/templates/vue/pages/left-page-1.vue +0 -14
- package/create/templates/vue/pages/left-page-2.vue +0 -11
- package/create/templates/vue/pages/product.vue +0 -31
- package/create/templates/vue/pages/request-and-load.vue +0 -25
- package/create/templates/vue/pages/settings.vue +0 -18
- package/create/templates/vue/vite.config.js +0 -11
- package/create/templates/zaui/_tsconfig.json +0 -33
- package/create/templates/zaui/babel.config.js +0 -12
- package/create/templates/zaui/components/user-card.jsx +0 -16
- package/create/templates/zaui/copy-assets.js +0 -1
- package/create/templates/zaui/generate-home-page.js +0 -91
- package/create/templates/zaui/generate-root.js +0 -33
- package/create/templates/zaui/generate-routes.js +0 -1
- package/create/templates/zaui/generate-scripts.js +0 -25
- package/create/templates/zaui/generate-user-card.js +0 -40
- package/create/templates/zaui/pages/about.js +0 -112
- package/create/templates/zaui/pages/form.js +0 -106
- package/create/templates/zaui/pages/index.js +0 -1
- package/create/templates/zaui/pages/user.js +0 -92
- package/create/templates/zaui/vite.config.js +0 -11
- package/create/utils/colors.js +0 -1
- package/create/utils/generate-gitignore.js +0 -1
- package/create/utils/generate-package-json.js +0 -1
- package/create/utils/generate-readme.js +0 -1
- package/create/utils/indent.js +0 -1
- package/create/utils/string.js +0 -1
- package/create/utils/styles-extension.js +0 -1
- package/create/utils/template-if.js +0 -1
- package/start/generate-hr-config.js +0 -1
|
@@ -1,44 +0,0 @@
|
|
|
1
|
-
"use strict";const t=require("../../../utils/indent");module.exports=o=>t(0,`
|
|
2
|
-
import React from 'react'
|
|
3
|
-
import { Actions, ActionsButton, ActionsGroup, ActionsLabel, Button, Card, Page, Box } from 'zmp-framework/react';
|
|
4
|
-
import NavbarBack from '../components/navbar-back';
|
|
5
|
-
|
|
6
|
-
const AboutPage = (props) => {
|
|
7
|
-
const [actionSheetOpened, setActionSheetOpened] = React.useState(false);
|
|
8
|
-
|
|
9
|
-
return (
|
|
10
|
-
<Page name="about">
|
|
11
|
-
<NavbarBack title="About" />
|
|
12
|
-
<Box mt="2">
|
|
13
|
-
<Card inset title="About My App">
|
|
14
|
-
<p>This is a demo ZMP App!</p>
|
|
15
|
-
</Card>
|
|
16
|
-
</Box>
|
|
17
|
-
<Box mb="4">
|
|
18
|
-
<Button
|
|
19
|
-
typeName="secondary"
|
|
20
|
-
responsive
|
|
21
|
-
onClick={() => setActionSheetOpened(true)}
|
|
22
|
-
>
|
|
23
|
-
Back
|
|
24
|
-
</Button>
|
|
25
|
-
</Box>
|
|
26
|
-
<Actions
|
|
27
|
-
opened={actionSheetOpened}
|
|
28
|
-
onActionsClosed={() => setActionSheetOpened(false)}
|
|
29
|
-
id="actions-two-groups"
|
|
30
|
-
>
|
|
31
|
-
<ActionsGroup>
|
|
32
|
-
<ActionsLabel>Are you sure?</ActionsLabel>
|
|
33
|
-
<ActionsButton onClick={() => props.zmprouter.back()}>Navigate back</ActionsButton>
|
|
34
|
-
</ActionsGroup>
|
|
35
|
-
<ActionsGroup>
|
|
36
|
-
<ActionsButton>Cancel</ActionsButton>
|
|
37
|
-
</ActionsGroup>
|
|
38
|
-
</Actions>
|
|
39
|
-
</Page>
|
|
40
|
-
)
|
|
41
|
-
}
|
|
42
|
-
|
|
43
|
-
export default AboutPage;
|
|
44
|
-
`).trim();
|
|
@@ -1,98 +0,0 @@
|
|
|
1
|
-
"use strict";const t=require("../../../utils/indent");module.exports=e=>"recoil"===e.stateManagement?t(0,`
|
|
2
|
-
import React from "react";
|
|
3
|
-
import { useRecoilState } from 'recoil';
|
|
4
|
-
import { Page, Title, List, ListItem, Box, Button } from 'zmp-framework/react';
|
|
5
|
-
import { productsState } from '../state';
|
|
6
|
-
|
|
7
|
-
const CatalogPage = () => {
|
|
8
|
-
const [products, setProducts] = useRecoilState(productsState)
|
|
9
|
-
|
|
10
|
-
const addProduct = () => {
|
|
11
|
-
setProducts(p => [
|
|
12
|
-
...p,
|
|
13
|
-
{
|
|
14
|
-
id: '4',
|
|
15
|
-
title: 'Apple iPhone 12',
|
|
16
|
-
description: 'Lorem ipsum dolor sit amet, consectetur adipisicing elit. Nisi tempora similique reiciendis, error nesciunt vero, blanditiis pariatur dolor, minima sed sapiente rerum, dolorem corrupti hic modi praesentium unde saepe perspiciatis.'
|
|
17
|
-
}
|
|
18
|
-
])
|
|
19
|
-
}
|
|
20
|
-
|
|
21
|
-
return (
|
|
22
|
-
<Page name="catalog">
|
|
23
|
-
<Box m="0" p="4">
|
|
24
|
-
<Title>Catalog</Title>
|
|
25
|
-
<List>
|
|
26
|
-
{products.map((product) => (
|
|
27
|
-
<ListItem
|
|
28
|
-
key={product.id}
|
|
29
|
-
title={product.title}
|
|
30
|
-
link={\`/product/\${product.id}/\`}
|
|
31
|
-
/>
|
|
32
|
-
))}
|
|
33
|
-
</List>
|
|
34
|
-
{products.length === 3 && (
|
|
35
|
-
<Box>
|
|
36
|
-
<Button responsive typeName="secondary" onClick={addProduct}>
|
|
37
|
-
Add Product
|
|
38
|
-
</Button>
|
|
39
|
-
</Box>
|
|
40
|
-
)}
|
|
41
|
-
</Box>
|
|
42
|
-
</Page>
|
|
43
|
-
);
|
|
44
|
-
};
|
|
45
|
-
|
|
46
|
-
export default CatalogPage;
|
|
47
|
-
`).trim():t(0,`
|
|
48
|
-
import React from "react";
|
|
49
|
-
import {
|
|
50
|
-
Page,
|
|
51
|
-
Title,
|
|
52
|
-
List,
|
|
53
|
-
ListItem,
|
|
54
|
-
Box,
|
|
55
|
-
Button,
|
|
56
|
-
useStore
|
|
57
|
-
} from "zmp-framework/react";
|
|
58
|
-
import store from "../store";
|
|
59
|
-
|
|
60
|
-
const CatalogPage = () => {
|
|
61
|
-
const products = useStore("products");
|
|
62
|
-
|
|
63
|
-
const addProduct = () => {
|
|
64
|
-
store.dispatch("addProduct", {
|
|
65
|
-
id: "4",
|
|
66
|
-
title: "Apple iPhone 12",
|
|
67
|
-
description:
|
|
68
|
-
"Lorem ipsum dolor sit amet, consectetur adipisicing elit. Nisi tempora similique reiciendis, error nesciunt vero, blanditiis pariatur dolor, minima sed sapiente rerum, dolorem corrupti hic modi praesentium unde saepe perspiciatis."
|
|
69
|
-
});
|
|
70
|
-
};
|
|
71
|
-
|
|
72
|
-
return (
|
|
73
|
-
<Page name="catalog">
|
|
74
|
-
<Box m="0" p="4">
|
|
75
|
-
<Title>Catalog</Title>
|
|
76
|
-
<List>
|
|
77
|
-
{products.map((product) => (
|
|
78
|
-
<ListItem
|
|
79
|
-
key={product.id}
|
|
80
|
-
title={product.title}
|
|
81
|
-
link={\`/product/\${product.id}/\`}
|
|
82
|
-
/>
|
|
83
|
-
))}
|
|
84
|
-
</List>
|
|
85
|
-
{products.length === 3 && (
|
|
86
|
-
<Box>
|
|
87
|
-
<Button responsive typeName="secondary" onClick={addProduct}>
|
|
88
|
-
Add Product
|
|
89
|
-
</Button>
|
|
90
|
-
</Box>
|
|
91
|
-
)}
|
|
92
|
-
</Box>
|
|
93
|
-
</Page>
|
|
94
|
-
);
|
|
95
|
-
};
|
|
96
|
-
|
|
97
|
-
export default CatalogPage;
|
|
98
|
-
`).trim();
|
|
@@ -1,72 +0,0 @@
|
|
|
1
|
-
"use strict";const t=require("../../../utils/indent");module.exports=e=>t(0,`
|
|
2
|
-
import React from 'react'
|
|
3
|
-
import { Button, Box, List, ListItem, Page } from 'zmp-framework/react'
|
|
4
|
-
import NavbarBack from '../components/navbar-back';
|
|
5
|
-
|
|
6
|
-
const DymanicRoutePage = (props) => {
|
|
7
|
-
const { zmproute, zmprouter } = props;
|
|
8
|
-
|
|
9
|
-
return (
|
|
10
|
-
<Page name="dynamic-route">
|
|
11
|
-
<NavbarBack title="Dynamic (Component) Route" />
|
|
12
|
-
<List>
|
|
13
|
-
<ListItem>
|
|
14
|
-
<div>
|
|
15
|
-
<div><strong>Route</strong></div>
|
|
16
|
-
<div>{zmproute.route.path}</div>
|
|
17
|
-
</div>
|
|
18
|
-
</ListItem>
|
|
19
|
-
<ListItem>
|
|
20
|
-
<div>
|
|
21
|
-
<div><strong>Url</strong></div>
|
|
22
|
-
<div>{zmproute.url}</div>
|
|
23
|
-
</div>
|
|
24
|
-
</ListItem>
|
|
25
|
-
<ListItem>
|
|
26
|
-
<div>
|
|
27
|
-
<div><strong>Path</strong></div>
|
|
28
|
-
<div>{zmproute.path}</div>
|
|
29
|
-
</div>
|
|
30
|
-
</ListItem>
|
|
31
|
-
<ListItem>
|
|
32
|
-
<div>
|
|
33
|
-
<div><strong>Hash</strong></div>
|
|
34
|
-
<div>{zmproute.hash}</div>
|
|
35
|
-
</div>
|
|
36
|
-
</ListItem>
|
|
37
|
-
<ListItem>
|
|
38
|
-
<div>
|
|
39
|
-
<div><strong>Params</strong></div>
|
|
40
|
-
<div>
|
|
41
|
-
<ul>
|
|
42
|
-
{Object.keys(zmproute.params).map(key => (<li key={key}>{key}: {zmproute.params[key]}</li>))}
|
|
43
|
-
</ul>
|
|
44
|
-
</div>
|
|
45
|
-
</div>
|
|
46
|
-
</ListItem>
|
|
47
|
-
<ListItem>
|
|
48
|
-
<div>
|
|
49
|
-
<div><strong>Query</strong></div>
|
|
50
|
-
<div>
|
|
51
|
-
<ul>
|
|
52
|
-
{Object.keys(zmproute.query).map(key => (<li key={key}>{key}: {zmproute.query[key]}</li>))}
|
|
53
|
-
</ul>
|
|
54
|
-
</div>
|
|
55
|
-
</div>
|
|
56
|
-
</ListItem>
|
|
57
|
-
</List>
|
|
58
|
-
<Box px={4} mb={4}>
|
|
59
|
-
<Button
|
|
60
|
-
typeName="primary"
|
|
61
|
-
responsive
|
|
62
|
-
onClick={() => zmprouter.back()}
|
|
63
|
-
>
|
|
64
|
-
Go back via Router API
|
|
65
|
-
</Button>
|
|
66
|
-
</Box>
|
|
67
|
-
</Page>
|
|
68
|
-
)
|
|
69
|
-
}
|
|
70
|
-
|
|
71
|
-
export default DymanicRoutePage;
|
|
72
|
-
`).trim();
|
|
@@ -1,132 +0,0 @@
|
|
|
1
|
-
"use strict";const e=require("../../../utils/indent");module.exports=t=>{let{template:a}=t,o="tabs"===a?`onPageBeforeIn={()=>{
|
|
2
|
-
//hide navbar
|
|
3
|
-
zmp.toolbar.hide('#app-tab-bar')
|
|
4
|
-
}}`:"";return"recoil"===t.stateManagement?e(0,`
|
|
5
|
-
import React from 'react';
|
|
6
|
-
import { Button, Card, Input, Page, Box, zmp } from 'zmp-framework/react';
|
|
7
|
-
import { useRecoilState } from 'recoil';
|
|
8
|
-
import { userState } from '../state';
|
|
9
|
-
import NavbarBack from '../components/navbar-back';
|
|
10
|
-
|
|
11
|
-
const FormPage = () => {
|
|
12
|
-
const [user, setUser] = useRecoilState(userState)
|
|
13
|
-
|
|
14
|
-
const [form, setForm] = React.useState({ ...user });
|
|
15
|
-
const toast = React.useRef(null)
|
|
16
|
-
|
|
17
|
-
const handleChangeInput = (field, value) => {
|
|
18
|
-
setForm({ ...form, [field]: value })
|
|
19
|
-
}
|
|
20
|
-
|
|
21
|
-
const handleSubmit = () => {
|
|
22
|
-
if (!toast.current) {
|
|
23
|
-
toast.current = zmp.toast.create({
|
|
24
|
-
text: 'Saved',
|
|
25
|
-
position: 'bottom',
|
|
26
|
-
closeTimeout: 2000,
|
|
27
|
-
})
|
|
28
|
-
}
|
|
29
|
-
setUser(form);
|
|
30
|
-
toast.current.open()
|
|
31
|
-
}
|
|
32
|
-
|
|
33
|
-
return (
|
|
34
|
-
<Page
|
|
35
|
-
name="user-form"
|
|
36
|
-
${o}
|
|
37
|
-
>
|
|
38
|
-
<NavbarBack title="Update user info" />
|
|
39
|
-
<Box>
|
|
40
|
-
<Card inset>
|
|
41
|
-
<Input
|
|
42
|
-
id="name"
|
|
43
|
-
label="Name"
|
|
44
|
-
type="text"
|
|
45
|
-
placeholder="Zalo"
|
|
46
|
-
value={form?.name}
|
|
47
|
-
onChange={(e) => handleChangeInput('name', e.target.value)}
|
|
48
|
-
/>
|
|
49
|
-
<Input
|
|
50
|
-
label="Avatar"
|
|
51
|
-
type="text"
|
|
52
|
-
placeholder="zalo@zalo.me"
|
|
53
|
-
value={form?.avatar}
|
|
54
|
-
onChange={(e) => handleChangeInput('avatar', e.target.value)}
|
|
55
|
-
/>
|
|
56
|
-
<Box mx="0" mt="4">
|
|
57
|
-
<Button responsive typeName="primary" onClick={handleSubmit}>
|
|
58
|
-
Submit
|
|
59
|
-
</Button>
|
|
60
|
-
</Box>
|
|
61
|
-
</Card>
|
|
62
|
-
</Box>
|
|
63
|
-
</Page>
|
|
64
|
-
)
|
|
65
|
-
}
|
|
66
|
-
|
|
67
|
-
export default FormPage;
|
|
68
|
-
`).trim():e(0,`
|
|
69
|
-
import React from 'react';
|
|
70
|
-
import { Button, Card, Input, Page, useStore, zmp, Box } from 'zmp-framework/react';
|
|
71
|
-
import NavbarBack from '../components/navbar-back';
|
|
72
|
-
|
|
73
|
-
import store from '../store'
|
|
74
|
-
|
|
75
|
-
const FormPage = () => {
|
|
76
|
-
const user = useStore('user')
|
|
77
|
-
|
|
78
|
-
const [form, setForm] = React.useState({ ...user });
|
|
79
|
-
const toast = React.useRef(null)
|
|
80
|
-
|
|
81
|
-
const handleChangeInput = (field, value) => {
|
|
82
|
-
setForm({ ...form, [field]: value })
|
|
83
|
-
}
|
|
84
|
-
|
|
85
|
-
const handleSubmit = () => {
|
|
86
|
-
if (!toast.current) {
|
|
87
|
-
toast.current = zmp.toast.create({
|
|
88
|
-
text: 'Saved',
|
|
89
|
-
position: 'bottom',
|
|
90
|
-
closeTimeout: 2000,
|
|
91
|
-
})
|
|
92
|
-
}
|
|
93
|
-
store.dispatch('setUser', form)
|
|
94
|
-
toast.current.open()
|
|
95
|
-
}
|
|
96
|
-
|
|
97
|
-
return (
|
|
98
|
-
<Page
|
|
99
|
-
name="user-form"
|
|
100
|
-
${o}
|
|
101
|
-
>
|
|
102
|
-
<NavbarBack title="Update user info" />
|
|
103
|
-
<Box>
|
|
104
|
-
<Card inset>
|
|
105
|
-
<Input
|
|
106
|
-
id="name"
|
|
107
|
-
label="Name"
|
|
108
|
-
type="text"
|
|
109
|
-
placeholder="Zalo"
|
|
110
|
-
value={form?.name}
|
|
111
|
-
onChange={(e) => handleChangeInput('name', e.target.value)}
|
|
112
|
-
/>
|
|
113
|
-
<Input
|
|
114
|
-
label="Avatar"
|
|
115
|
-
type="text"
|
|
116
|
-
placeholder="zalo@zalo.me"
|
|
117
|
-
value={form?.avatar}
|
|
118
|
-
onChange={(e) => handleChangeInput('avatar', e.target.value)}
|
|
119
|
-
/>
|
|
120
|
-
<Box mx="0" mt="4">
|
|
121
|
-
<Button responsive typeName="primary" onClick={handleSubmit}>
|
|
122
|
-
Submit
|
|
123
|
-
</Button>
|
|
124
|
-
</Box>
|
|
125
|
-
</Card>
|
|
126
|
-
</Box>
|
|
127
|
-
</Page>
|
|
128
|
-
)
|
|
129
|
-
}
|
|
130
|
-
|
|
131
|
-
export default FormPage;
|
|
132
|
-
`).trim()};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
"use strict";const e=require("./user"),r=require("./form"),u=require("./dynamic-route"),i=require("./about"),t=require("./404"),o=require("./settings"),q=require("./catalog");module.exports={copyUser:e,copyForm:r,copyDynamicRoute:u,copyAbout:i,copy404:t,copySettings:o,copyCatalog:q};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
"use strict";const e=require("./user"),r=require("./form"),u=require("./dynamic-route"),i=require("./about"),t=require("./404"),o=require("./settings"),q=require("./catalog");module.exports={copyUser:e,copyForm:r,copyDynamicRoute:u,copyAbout:i,copy404:t,copySettings:o,copyCatalog:q};
|
|
@@ -1,62 +0,0 @@
|
|
|
1
|
-
"use strict";const e=require("../../../utils/indent");module.exports=t=>"recoil"===t.stateManagement?e(0,`
|
|
2
|
-
import React from "react";
|
|
3
|
-
import { useRecoilValue } from 'recoil';
|
|
4
|
-
import {
|
|
5
|
-
Page,
|
|
6
|
-
List,
|
|
7
|
-
ListItem,
|
|
8
|
-
Title,
|
|
9
|
-
Box
|
|
10
|
-
} from "zmp-framework/react";
|
|
11
|
-
import UserCard from "../components/user-card";
|
|
12
|
-
import { userState } from '../state'
|
|
13
|
-
|
|
14
|
-
const SettingsPage = () => {
|
|
15
|
-
const user = useRecoilValue(userState);
|
|
16
|
-
|
|
17
|
-
return (
|
|
18
|
-
<Page name="settings">
|
|
19
|
-
<Box m="0" p="4">
|
|
20
|
-
<Title>Settings</Title>
|
|
21
|
-
<List className="m-0">
|
|
22
|
-
<ListItem link="/user/">
|
|
23
|
-
<UserCard user={user} />
|
|
24
|
-
</ListItem>
|
|
25
|
-
</List>
|
|
26
|
-
</Box>
|
|
27
|
-
</Page>
|
|
28
|
-
);
|
|
29
|
-
};
|
|
30
|
-
|
|
31
|
-
export default SettingsPage;
|
|
32
|
-
`).trim():e(0,`
|
|
33
|
-
import React from "react";
|
|
34
|
-
import {
|
|
35
|
-
Page,
|
|
36
|
-
List,
|
|
37
|
-
ListItem,
|
|
38
|
-
useStore,
|
|
39
|
-
Title,
|
|
40
|
-
Box
|
|
41
|
-
} from "zmp-framework/react";
|
|
42
|
-
import UserCard from "../components/user-card";
|
|
43
|
-
|
|
44
|
-
const SettingsPage = () => {
|
|
45
|
-
const user = useStore("user");
|
|
46
|
-
|
|
47
|
-
return (
|
|
48
|
-
<Page name="settings">
|
|
49
|
-
<Box m="0" p="4">
|
|
50
|
-
<Title>Settings</Title>
|
|
51
|
-
<List className="m-0">
|
|
52
|
-
<ListItem link="/user/">
|
|
53
|
-
<UserCard user={user} />
|
|
54
|
-
</ListItem>
|
|
55
|
-
</List>
|
|
56
|
-
</Box>
|
|
57
|
-
</Page>
|
|
58
|
-
);
|
|
59
|
-
};
|
|
60
|
-
|
|
61
|
-
export default SettingsPage;
|
|
62
|
-
`).trim();
|
|
@@ -1,37 +0,0 @@
|
|
|
1
|
-
"use strict";const e=require("../../../utils/indent");module.exports=t=>{let{template:r,stateManagement:a}=t,s="tabs"===r?`
|
|
2
|
-
onPageBeforeIn={()=>{
|
|
3
|
-
//hide navbar
|
|
4
|
-
zmp.toolbar.hide('#app-tab-bar')
|
|
5
|
-
}}`:"",i=["Avatar","List","ListItem","Page","Title"];return"store"===a&&i.push("useStore"),"tabs"===r&&i.push("zmp"),e(0,`
|
|
6
|
-
import React from 'react'
|
|
7
|
-
import { ${i.join(", ")} } from 'zmp-framework/react'
|
|
8
|
-
import NavbarBack from '../components/navbar-back'${"recoil"===a?`
|
|
9
|
-
import { useRecoilValue } from 'recoil';
|
|
10
|
-
import { userState } from '../state';`:""}
|
|
11
|
-
|
|
12
|
-
const UserPage = () => {
|
|
13
|
-
${"recoil"===a?"const user = useRecoilValue(userState);":"const user = useStore('user')"}
|
|
14
|
-
|
|
15
|
-
return (
|
|
16
|
-
<Page
|
|
17
|
-
name="user"${s}
|
|
18
|
-
>
|
|
19
|
-
<NavbarBack
|
|
20
|
-
title="User info"
|
|
21
|
-
linkRight="/form"
|
|
22
|
-
labelRight="Edit"
|
|
23
|
-
/>
|
|
24
|
-
<div style={{ textAlign: 'center', marginTop: 32 }}>
|
|
25
|
-
<Avatar story online src={user.avatar.startsWith('http') ? user.avatar : null}>{user.avatar}</Avatar>
|
|
26
|
-
<Title style={{ marginTop: 8 }}>{user.name}</Title>
|
|
27
|
-
</div>
|
|
28
|
-
<List>
|
|
29
|
-
<ListItem title="Display name" after={user.name} />
|
|
30
|
-
<ListItem title="ID" after={user.id} />
|
|
31
|
-
</List>
|
|
32
|
-
</Page>
|
|
33
|
-
)
|
|
34
|
-
}
|
|
35
|
-
|
|
36
|
-
export default UserPage;
|
|
37
|
-
`).trim()};
|
|
@@ -1,33 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"compilerOptions": {
|
|
3
|
-
"noEmit": true,
|
|
4
|
-
"target": "es6",
|
|
5
|
-
"module": "esnext",
|
|
6
|
-
"noImplicitAny": false,
|
|
7
|
-
"preserveConstEnums": true,
|
|
8
|
-
"jsx": "react",
|
|
9
|
-
"lib": ["dom", "es5", "es6", "es7", "es2017"],
|
|
10
|
-
"allowSyntheticDefaultImports": true,
|
|
11
|
-
"esModuleInterop": true,
|
|
12
|
-
"allowJs": true,
|
|
13
|
-
"skipLibCheck": true,
|
|
14
|
-
"declaration": false,
|
|
15
|
-
"emitDecoratorMetadata": true,
|
|
16
|
-
"experimentalDecorators": true,
|
|
17
|
-
"forceConsistentCasingInFileNames": true,
|
|
18
|
-
"moduleResolution": "node",
|
|
19
|
-
"noEmitOnError": true,
|
|
20
|
-
"noFallthroughCasesInSwitch": true,
|
|
21
|
-
"noImplicitReturns": true,
|
|
22
|
-
"noImplicitThis": true,
|
|
23
|
-
"noUnusedLocals": false,
|
|
24
|
-
"strict": true,
|
|
25
|
-
"strictFunctionTypes": false,
|
|
26
|
-
"pretty": true,
|
|
27
|
-
"removeComments": true,
|
|
28
|
-
"sourceMap": true,
|
|
29
|
-
"resolveJsonModule": true
|
|
30
|
-
},
|
|
31
|
-
"exclude": ["node_modules"],
|
|
32
|
-
"include": ["src"]
|
|
33
|
-
}
|
|
@@ -1,46 +0,0 @@
|
|
|
1
|
-
"use strict";const o=require("../../../utils/indent");module.exports=e=>o(0,`
|
|
2
|
-
import React from 'react';
|
|
3
|
-
import { Icon, Grid, GridItem, ToastPreloader } from 'zmp-framework/react';
|
|
4
|
-
|
|
5
|
-
const AppItems = () => {
|
|
6
|
-
const [toastLoading, setToastLoading] = React.useState(false);
|
|
7
|
-
const items = [
|
|
8
|
-
{ icon: 'zi-chat-solid', label: 'Chat' },
|
|
9
|
-
{ icon: 'zi-photo-solid', label: 'Photo' },
|
|
10
|
-
{ icon: 'zi-star-solid', label: 'Star' },
|
|
11
|
-
{ icon: 'zi-more-diamond-solid', label: 'Apps' },
|
|
12
|
-
{ icon: 'zi-video-solid', label: 'Video' },
|
|
13
|
-
{ icon: 'zi-shield-solid', label: 'Shield' },
|
|
14
|
-
{ icon: 'zi-heart-solid', label: 'Heart' },
|
|
15
|
-
{ icon: 'zi-calendar-solid', label: 'Calendar' },
|
|
16
|
-
]
|
|
17
|
-
|
|
18
|
-
const openToastLoading = () => {
|
|
19
|
-
setToastLoading(true);
|
|
20
|
-
setTimeout(() => {
|
|
21
|
-
setToastLoading(false);
|
|
22
|
-
}, 2000);
|
|
23
|
-
};
|
|
24
|
-
|
|
25
|
-
return (
|
|
26
|
-
<div>
|
|
27
|
-
<ToastPreloader visible={toastLoading} text="Loading..." />
|
|
28
|
-
<Grid columns={4}>
|
|
29
|
-
{items.map(item => (
|
|
30
|
-
<GridItem
|
|
31
|
-
label={item.label}
|
|
32
|
-
style={{ backgroundColor: 'var(--zmp-color-w300)' }}
|
|
33
|
-
key={item.icon}
|
|
34
|
-
icon={<Icon zmp={item.icon as any} />}
|
|
35
|
-
onClick={openToastLoading}
|
|
36
|
-
/>
|
|
37
|
-
))}
|
|
38
|
-
</Grid>
|
|
39
|
-
</div>
|
|
40
|
-
)
|
|
41
|
-
}
|
|
42
|
-
|
|
43
|
-
AppItems.displayName = 'zmp-app-items'
|
|
44
|
-
|
|
45
|
-
export default AppItems
|
|
46
|
-
`).trim();
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
"use strict";const e=require("./app-items"),r=require("./navbar-back"),s=require("./user-card");module.exports={copyAppItems:e,copyNavbarBack:r,copyUserCard:s};
|
|
@@ -1,33 +0,0 @@
|
|
|
1
|
-
"use strict";const a=require("../../../utils/indent");module.exports=t=>a(0,`
|
|
2
|
-
import React from 'react';
|
|
3
|
-
import { Link, Navbar, NavLeft, Icon, NavTitle, NavRight } from 'zmp-framework/react';
|
|
4
|
-
|
|
5
|
-
interface NavBarProps {
|
|
6
|
-
title?: string,
|
|
7
|
-
linkRight?: string,
|
|
8
|
-
labelRight?: string
|
|
9
|
-
}
|
|
10
|
-
|
|
11
|
-
const NavbarBack: React.FunctionComponent<NavBarProps> = ({ title, linkRight, labelRight }) => {
|
|
12
|
-
return (
|
|
13
|
-
<Navbar>
|
|
14
|
-
<NavLeft >
|
|
15
|
-
<Link className="no-ripple" noLinkClass back>
|
|
16
|
-
<Icon zmp="zi-arrow-left" />
|
|
17
|
-
</Link>
|
|
18
|
-
</NavLeft>
|
|
19
|
-
<NavTitle>{title}</NavTitle>
|
|
20
|
-
{linkRight && labelRight && (
|
|
21
|
-
<NavRight>
|
|
22
|
-
<Link href={linkRight} className="no-ripple" noLinkClass>{labelRight}</Link>
|
|
23
|
-
</NavRight>
|
|
24
|
-
)}
|
|
25
|
-
</Navbar>
|
|
26
|
-
)
|
|
27
|
-
}
|
|
28
|
-
|
|
29
|
-
NavbarBack.displayName = 'zmp-navbar';
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
export default NavbarBack;
|
|
33
|
-
`).trim();
|
|
@@ -1,25 +0,0 @@
|
|
|
1
|
-
"use strict";const r=require("../../../utils/indent");module.exports=e=>r(0,`
|
|
2
|
-
import React from 'react';
|
|
3
|
-
import { Avatar, Title } from 'zmp-framework/react';
|
|
4
|
-
import { userInfo } from 'zmp-sdk';
|
|
5
|
-
|
|
6
|
-
interface UserProps {
|
|
7
|
-
user: userInfo
|
|
8
|
-
}
|
|
9
|
-
|
|
10
|
-
const UserCard: React.FunctionComponent<UserProps> = ({ user }) => {
|
|
11
|
-
return (
|
|
12
|
-
<div style={{ display: 'flex', width: '100%' }}>
|
|
13
|
-
<Avatar story online src={user.avatar.startsWith('http') ? user.avatar : null}>{user.avatar}</Avatar>
|
|
14
|
-
<div style={{ marginLeft: 16 }}>
|
|
15
|
-
<Title style={{ marginBottom: 0 }}>{user.name}</Title>
|
|
16
|
-
<div>{user.id}</div>
|
|
17
|
-
</div>
|
|
18
|
-
</div>
|
|
19
|
-
)
|
|
20
|
-
};
|
|
21
|
-
|
|
22
|
-
UserCard.displayName = 'zmp-user-card'
|
|
23
|
-
|
|
24
|
-
export default UserCard;
|
|
25
|
-
`).trim();
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
"use strict";const e=require("path"),t=require("./generate-home-page"),o=require("./generate-root"),n=require("../generate-store"),s=require("../generate-recoil"),r=require("./components"),c=require("./pages"),a=require("./vite.config");module.exports=p=>{let i=p.cwd||process.cwd(),{template:l,stateManagement:u}=p,m=[],f=[];return"blank"!==l&&f.push({fileName:"404",content:"copy404"},{fileName:"about",content:"copyAbout"},{fileName:"dynamic-route",content:"copyDynamicRoute"},{fileName:"user",content:"copyUser"},{fileName:"form",content:"copyForm"}),"tabs"===l&&f.push({fileName:"catalog",content:"copyCatalog"},{fileName:"settings",content:"copySettings"}),f.forEach(({fileName:t,content:o})=>{let n=e.resolve(i,"src","pages",`${t}.tsx`);m.push({content:c[o](p),to:n})}),m.push({content:t(p),to:e.resolve(i,"src","pages","index.tsx")}),[..."blank"!==l?[{fileName:"app-items",content:"copyAppItems"},{fileName:"navbar-back",content:"copyNavbarBack"},{fileName:"user-card",content:"copyUserCard"}]:[]].forEach(({fileName:t,content:o})=>{let n=e.resolve(i,"src","components",`${t}.tsx`);m.push({content:r[o](p),to:n})}),m.push({content:o(p),to:e.resolve(i,"src","components","app.tsx")}),"recoil"===u?m.push({content:s(p),to:e.resolve(i,"src","state.ts")}):m.push({content:n(p),to:e.resolve(i,"src","store.ts")}),m.push({content:a(p),to:e.resolve(i,"vite.config.ts")}),m.push({from:e.resolve(__dirname,"_tsconfig.json"),to:e.resolve(i,"tsconfig.json")}),m};
|