@invoice-sdk/widget 0.0.0 → 1.5.2
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/package.json +5 -5
- package/src/components/button.tsx +22 -22
- package/src/components/form/custom-checkbox.tsx +20 -20
- package/src/components/form/file-upload.tsx +140 -140
- package/src/components/form/input-field.tsx +34 -34
- package/src/components/form/select-option.tsx +74 -74
- package/src/components/layout.tsx +13 -13
- package/src/components/process.tsx +20 -20
- package/src/index.ts +1 -1
- package/src/pages/register.tsx +222 -222
- package/src/pages/select-plan.tsx +39 -39
- package/src/pages/select-provider.tsx +73 -73
- package/src/pages/status.tsx +8 -8
- package/src/store/process.ts +17 -17
- package/src/store/register.ts +59 -59
- package/tsconfig.json +19 -19
- package/tsconfig.tsbuildinfo +1 -1
|
@@ -1,74 +1,74 @@
|
|
|
1
|
-
import { useNavigate } from "react-router-dom";
|
|
2
|
-
import Button from "../components/button";
|
|
3
|
-
import CustomCheckbox from "../components/form/custom-checkbox";
|
|
4
|
-
import { useProcessStore } from "../store/process";
|
|
5
|
-
import { useRegisterStore } from "../store/register";
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
interface IProvider {
|
|
10
|
-
name: string;
|
|
11
|
-
route: string;
|
|
12
|
-
};
|
|
13
|
-
|
|
14
|
-
const providers: IProvider[] = [
|
|
15
|
-
{ name: 'M-Invoice', route: 'm-invoice' },
|
|
16
|
-
{ name: 'FPT', route: 'fpt' },
|
|
17
|
-
{ name: 'Misa', route: 'misa' },
|
|
18
|
-
];
|
|
19
|
-
|
|
20
|
-
const ProviderItem = ({ provider, handleProviderChange }: { provider: IProvider,
|
|
21
|
-
handleProviderChange: (provider: string) => void
|
|
22
|
-
} ) => {
|
|
23
|
-
const selectedProvider = useRegisterStore((state) => state.selectedProvider)
|
|
24
|
-
return (
|
|
25
|
-
<div
|
|
26
|
-
data-checked={selectedProvider === provider.route}
|
|
27
|
-
className="flex items-center justify-center gap-2 px-4 py-2 border border-gray-300 rounded-md hover:bg-gray-100 cursor-pointer
|
|
28
|
-
transition-colors duration-200 data-[checked=true]:border-green-500 data-[checked=true]:text-green-700
|
|
29
|
-
"
|
|
30
|
-
onClick={() => handleProviderChange(provider.route)}
|
|
31
|
-
>
|
|
32
|
-
<CustomCheckbox checked={selectedProvider === provider.route}
|
|
33
|
-
setChecked={() => handleProviderChange(provider.route)}
|
|
34
|
-
/>
|
|
35
|
-
<label className="">{provider.name}</label>
|
|
36
|
-
</div>
|
|
37
|
-
)
|
|
38
|
-
}
|
|
39
|
-
|
|
40
|
-
const SelectProvider = () => {
|
|
41
|
-
|
|
42
|
-
const navigate = useNavigate()
|
|
43
|
-
const selectedProvider = useRegisterStore((state) => state.selectedProvider);
|
|
44
|
-
const setSelectedProvider = useRegisterStore((state) => state.setSelectedProvider);
|
|
45
|
-
const nextStep = useProcessStore(state => state.nextStep);
|
|
46
|
-
|
|
47
|
-
const handleProviderChange = (provider: string) => {
|
|
48
|
-
setSelectedProvider(provider);
|
|
49
|
-
};
|
|
50
|
-
|
|
51
|
-
return (
|
|
52
|
-
<div className="w-full flex flex-col gap-6">
|
|
53
|
-
<h2 className="heading">Select Provider</h2>
|
|
54
|
-
<div className="flex gap-20">
|
|
55
|
-
{
|
|
56
|
-
providers.map((provider) => (
|
|
57
|
-
<ProviderItem key={provider.route} provider={provider} handleProviderChange={handleProviderChange} />
|
|
58
|
-
))
|
|
59
|
-
}
|
|
60
|
-
</div>
|
|
61
|
-
<div className='text-right'>
|
|
62
|
-
<Button title={'Next'}
|
|
63
|
-
isDisabled={!selectedProvider}
|
|
64
|
-
handleClick={() => {
|
|
65
|
-
nextStep()
|
|
66
|
-
navigate("/register")
|
|
67
|
-
}}
|
|
68
|
-
/>
|
|
69
|
-
</div>
|
|
70
|
-
</div>
|
|
71
|
-
)
|
|
72
|
-
}
|
|
73
|
-
|
|
1
|
+
import { useNavigate } from "react-router-dom";
|
|
2
|
+
import Button from "../components/button";
|
|
3
|
+
import CustomCheckbox from "../components/form/custom-checkbox";
|
|
4
|
+
import { useProcessStore } from "../store/process";
|
|
5
|
+
import { useRegisterStore } from "../store/register";
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
interface IProvider {
|
|
10
|
+
name: string;
|
|
11
|
+
route: string;
|
|
12
|
+
};
|
|
13
|
+
|
|
14
|
+
const providers: IProvider[] = [
|
|
15
|
+
{ name: 'M-Invoice', route: 'm-invoice' },
|
|
16
|
+
{ name: 'FPT', route: 'fpt' },
|
|
17
|
+
{ name: 'Misa', route: 'misa' },
|
|
18
|
+
];
|
|
19
|
+
|
|
20
|
+
const ProviderItem = ({ provider, handleProviderChange }: { provider: IProvider,
|
|
21
|
+
handleProviderChange: (provider: string) => void
|
|
22
|
+
} ) => {
|
|
23
|
+
const selectedProvider = useRegisterStore((state) => state.selectedProvider)
|
|
24
|
+
return (
|
|
25
|
+
<div
|
|
26
|
+
data-checked={selectedProvider === provider.route}
|
|
27
|
+
className="flex items-center justify-center gap-2 px-4 py-2 border border-gray-300 rounded-md hover:bg-gray-100 cursor-pointer
|
|
28
|
+
transition-colors duration-200 data-[checked=true]:border-green-500 data-[checked=true]:text-green-700
|
|
29
|
+
"
|
|
30
|
+
onClick={() => handleProviderChange(provider.route)}
|
|
31
|
+
>
|
|
32
|
+
<CustomCheckbox checked={selectedProvider === provider.route}
|
|
33
|
+
setChecked={() => handleProviderChange(provider.route)}
|
|
34
|
+
/>
|
|
35
|
+
<label className="">{provider.name}</label>
|
|
36
|
+
</div>
|
|
37
|
+
)
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
const SelectProvider = () => {
|
|
41
|
+
|
|
42
|
+
const navigate = useNavigate()
|
|
43
|
+
const selectedProvider = useRegisterStore((state) => state.selectedProvider);
|
|
44
|
+
const setSelectedProvider = useRegisterStore((state) => state.setSelectedProvider);
|
|
45
|
+
const nextStep = useProcessStore(state => state.nextStep);
|
|
46
|
+
|
|
47
|
+
const handleProviderChange = (provider: string) => {
|
|
48
|
+
setSelectedProvider(provider);
|
|
49
|
+
};
|
|
50
|
+
|
|
51
|
+
return (
|
|
52
|
+
<div className="w-full flex flex-col gap-6">
|
|
53
|
+
<h2 className="heading">Select Provider</h2>
|
|
54
|
+
<div className="flex gap-20">
|
|
55
|
+
{
|
|
56
|
+
providers.map((provider) => (
|
|
57
|
+
<ProviderItem key={provider.route} provider={provider} handleProviderChange={handleProviderChange} />
|
|
58
|
+
))
|
|
59
|
+
}
|
|
60
|
+
</div>
|
|
61
|
+
<div className='text-right'>
|
|
62
|
+
<Button title={'Next'}
|
|
63
|
+
isDisabled={!selectedProvider}
|
|
64
|
+
handleClick={() => {
|
|
65
|
+
nextStep()
|
|
66
|
+
navigate("/register")
|
|
67
|
+
}}
|
|
68
|
+
/>
|
|
69
|
+
</div>
|
|
70
|
+
</div>
|
|
71
|
+
)
|
|
72
|
+
}
|
|
73
|
+
|
|
74
74
|
export default SelectProvider
|
package/src/pages/status.tsx
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
const Status = () => {
|
|
4
|
-
return (
|
|
5
|
-
<div>Status</div>
|
|
6
|
-
)
|
|
7
|
-
}
|
|
8
|
-
|
|
1
|
+
|
|
2
|
+
|
|
3
|
+
const Status = () => {
|
|
4
|
+
return (
|
|
5
|
+
<div>Status</div>
|
|
6
|
+
)
|
|
7
|
+
}
|
|
8
|
+
|
|
9
9
|
export default Status
|
package/src/store/process.ts
CHANGED
|
@@ -1,18 +1,18 @@
|
|
|
1
|
-
import {create} from 'zustand';
|
|
2
|
-
|
|
3
|
-
type State = {
|
|
4
|
-
step: number;
|
|
5
|
-
|
|
6
|
-
}
|
|
7
|
-
|
|
8
|
-
type Actions = {
|
|
9
|
-
nextStep: () => void
|
|
10
|
-
prevStep: () => void
|
|
11
|
-
}
|
|
12
|
-
|
|
13
|
-
export const useProcessStore = create<State & Actions>((set) => ({
|
|
14
|
-
step: 1,
|
|
15
|
-
nextStep: () => set((state) => ({ step: state.step + 1 })),
|
|
16
|
-
prevStep: () => set((state) => ({ step: Math.max(state.step - 1, 1) })),
|
|
17
|
-
reset: () => set({ step: 1})
|
|
1
|
+
import {create} from 'zustand';
|
|
2
|
+
|
|
3
|
+
type State = {
|
|
4
|
+
step: number;
|
|
5
|
+
|
|
6
|
+
}
|
|
7
|
+
|
|
8
|
+
type Actions = {
|
|
9
|
+
nextStep: () => void
|
|
10
|
+
prevStep: () => void
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
export const useProcessStore = create<State & Actions>((set) => ({
|
|
14
|
+
step: 1,
|
|
15
|
+
nextStep: () => set((state) => ({ step: state.step + 1 })),
|
|
16
|
+
prevStep: () => set((state) => ({ step: Math.max(state.step - 1, 1) })),
|
|
17
|
+
reset: () => set({ step: 1})
|
|
18
18
|
}));
|
package/src/store/register.ts
CHANGED
|
@@ -1,60 +1,60 @@
|
|
|
1
|
-
import {create } from 'zustand';
|
|
2
|
-
|
|
3
|
-
type State = {
|
|
4
|
-
selectedProvider: string | null;
|
|
5
|
-
form: {
|
|
6
|
-
taxCode: string;
|
|
7
|
-
companyName: string;
|
|
8
|
-
representative: string;
|
|
9
|
-
position: string;
|
|
10
|
-
email: string;
|
|
11
|
-
phoneNumber: string | null;
|
|
12
|
-
address: string ;
|
|
13
|
-
license: File | null;
|
|
14
|
-
},
|
|
15
|
-
selectedPlan: string | null;
|
|
16
|
-
}
|
|
17
|
-
|
|
18
|
-
type Actions = {
|
|
19
|
-
setSelectedProvider: (provider: string | null) => void;
|
|
20
|
-
setForm: (form: Partial<State['form']>) => void;
|
|
21
|
-
setSelectedPlan: (plan: string | null) => void;
|
|
22
|
-
reset: () => void;
|
|
23
|
-
}
|
|
24
|
-
export const useRegisterStore = create<State & Actions>((set) => ({
|
|
25
|
-
selectedProvider: null,
|
|
26
|
-
form: {
|
|
27
|
-
taxCode: '',
|
|
28
|
-
companyName: '',
|
|
29
|
-
representative: '',
|
|
30
|
-
position: '',
|
|
31
|
-
email: '',
|
|
32
|
-
phoneNumber: null,
|
|
33
|
-
address: '',
|
|
34
|
-
license: null,
|
|
35
|
-
},
|
|
36
|
-
selectedPlan: null,
|
|
37
|
-
|
|
38
|
-
setSelectedProvider: (provider) => set({ selectedProvider: provider }),
|
|
39
|
-
|
|
40
|
-
setForm: (form) => set((state) => ({
|
|
41
|
-
form: { ...state.form, ...form }
|
|
42
|
-
})),
|
|
43
|
-
|
|
44
|
-
setSelectedPlan: (plan) => set({ selectedPlan: plan }),
|
|
45
|
-
|
|
46
|
-
reset: () => set({
|
|
47
|
-
selectedProvider: null,
|
|
48
|
-
form: {
|
|
49
|
-
taxCode: '',
|
|
50
|
-
companyName: '',
|
|
51
|
-
representative: '',
|
|
52
|
-
position: '',
|
|
53
|
-
email: '',
|
|
54
|
-
phoneNumber: null,
|
|
55
|
-
address: '',
|
|
56
|
-
license: null,
|
|
57
|
-
},
|
|
58
|
-
selectedPlan: null,
|
|
59
|
-
}),
|
|
1
|
+
import {create } from 'zustand';
|
|
2
|
+
|
|
3
|
+
type State = {
|
|
4
|
+
selectedProvider: string | null;
|
|
5
|
+
form: {
|
|
6
|
+
taxCode: string;
|
|
7
|
+
companyName: string;
|
|
8
|
+
representative: string;
|
|
9
|
+
position: string;
|
|
10
|
+
email: string;
|
|
11
|
+
phoneNumber: string | null;
|
|
12
|
+
address: string ;
|
|
13
|
+
license: File | null;
|
|
14
|
+
},
|
|
15
|
+
selectedPlan: string | null;
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
type Actions = {
|
|
19
|
+
setSelectedProvider: (provider: string | null) => void;
|
|
20
|
+
setForm: (form: Partial<State['form']>) => void;
|
|
21
|
+
setSelectedPlan: (plan: string | null) => void;
|
|
22
|
+
reset: () => void;
|
|
23
|
+
}
|
|
24
|
+
export const useRegisterStore = create<State & Actions>((set) => ({
|
|
25
|
+
selectedProvider: null,
|
|
26
|
+
form: {
|
|
27
|
+
taxCode: '',
|
|
28
|
+
companyName: '',
|
|
29
|
+
representative: '',
|
|
30
|
+
position: '',
|
|
31
|
+
email: '',
|
|
32
|
+
phoneNumber: null,
|
|
33
|
+
address: '',
|
|
34
|
+
license: null,
|
|
35
|
+
},
|
|
36
|
+
selectedPlan: null,
|
|
37
|
+
|
|
38
|
+
setSelectedProvider: (provider) => set({ selectedProvider: provider }),
|
|
39
|
+
|
|
40
|
+
setForm: (form) => set((state) => ({
|
|
41
|
+
form: { ...state.form, ...form }
|
|
42
|
+
})),
|
|
43
|
+
|
|
44
|
+
setSelectedPlan: (plan) => set({ selectedPlan: plan }),
|
|
45
|
+
|
|
46
|
+
reset: () => set({
|
|
47
|
+
selectedProvider: null,
|
|
48
|
+
form: {
|
|
49
|
+
taxCode: '',
|
|
50
|
+
companyName: '',
|
|
51
|
+
representative: '',
|
|
52
|
+
position: '',
|
|
53
|
+
email: '',
|
|
54
|
+
phoneNumber: null,
|
|
55
|
+
address: '',
|
|
56
|
+
license: null,
|
|
57
|
+
},
|
|
58
|
+
selectedPlan: null,
|
|
59
|
+
}),
|
|
60
60
|
}));
|
package/tsconfig.json
CHANGED
|
@@ -1,19 +1,19 @@
|
|
|
1
|
-
{
|
|
2
|
-
"compilerOptions": {
|
|
3
|
-
"target": "ES2019",
|
|
4
|
-
"module": "CommonJS",
|
|
5
|
-
"jsx": "react-jsx",
|
|
6
|
-
"outDir": "dist",
|
|
7
|
-
"rootDir": "src",
|
|
8
|
-
"strict": true,
|
|
9
|
-
"declaration": true,
|
|
10
|
-
"declarationMap": true,
|
|
11
|
-
"sourceMap": true,
|
|
12
|
-
"esModuleInterop": true,
|
|
13
|
-
"forceConsistentCasingInFileNames": true,
|
|
14
|
-
"skipLibCheck": true,
|
|
15
|
-
"emitDeclarationOnly": true,
|
|
16
|
-
},
|
|
17
|
-
"include": ["src/**/*"],
|
|
18
|
-
"exclude": ["node_modules", "dist"]
|
|
19
|
-
}
|
|
1
|
+
{
|
|
2
|
+
"compilerOptions": {
|
|
3
|
+
"target": "ES2019",
|
|
4
|
+
"module": "CommonJS",
|
|
5
|
+
"jsx": "react-jsx",
|
|
6
|
+
"outDir": "dist",
|
|
7
|
+
"rootDir": "src",
|
|
8
|
+
"strict": true,
|
|
9
|
+
"declaration": true,
|
|
10
|
+
"declarationMap": true,
|
|
11
|
+
"sourceMap": true,
|
|
12
|
+
"esModuleInterop": true,
|
|
13
|
+
"forceConsistentCasingInFileNames": true,
|
|
14
|
+
"skipLibCheck": true,
|
|
15
|
+
"emitDeclarationOnly": true,
|
|
16
|
+
},
|
|
17
|
+
"include": ["src/**/*"],
|
|
18
|
+
"exclude": ["node_modules", "dist"]
|
|
19
|
+
}
|
package/tsconfig.tsbuildinfo
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"root":["./src/
|
|
1
|
+
{"root":["./src/App.tsx","./src/index.ts","./src/main.tsx","./src/vite-env.d.ts","./src/components/button.tsx","./src/components/layout.tsx","./src/components/process.tsx","./src/components/form/custom-checkbox.tsx","./src/components/form/file-upload.tsx","./src/components/form/input-field.tsx","./src/components/form/select-option.tsx","./src/pages/register.tsx","./src/pages/select-plan.tsx","./src/pages/select-provider.tsx","./src/pages/status.tsx","./src/store/process.ts","./src/store/register.ts"],"version":"5.8.3"}
|