Compare commits

...

4 Commits

@ -3,6 +3,9 @@ import { FC } from 'react'
import { NavigationContainer } from '@react-navigation/native';
import { MainStackNavitagor } from './src/navigator/MainStackNavigator';
import { AuthProvider } from './src/screens/login/AuthContext';
import * as eva from '@eva-design/eva';
import { ApplicationProvider, IconRegistry, Layout, Text } from '@ui-kitten/components';
import { EvaIconsPack } from '@ui-kitten/eva-icons';
interface Props {
}
@ -12,12 +15,16 @@ const App:FC <Props> = () => {
return (
<>
<NavigationContainer >
<AuthProvider>
<MainStackNavitagor/>
</AuthProvider>
</NavigationContainer>
<IconRegistry icons={EvaIconsPack} />
<ApplicationProvider {...eva} theme={eva.light}>
<NavigationContainer >
<AuthProvider>
<MainStackNavitagor/>
</AuthProvider>
</NavigationContainer>
</ApplicationProvider>
</>
)

@ -0,0 +1 @@
https://www.npmjs.com/package/@fortawesome/react-native-fontawesome

Before

Width:  |  Height:  |  Size: 12 KiB

After

Width:  |  Height:  |  Size: 12 KiB

Before

Width:  |  Height:  |  Size: 12 KiB

After

Width:  |  Height:  |  Size: 12 KiB

Before

Width:  |  Height:  |  Size: 13 KiB

After

Width:  |  Height:  |  Size: 13 KiB

590
package-lock.json generated

@ -8,10 +8,18 @@
"name": "reactnative",
"version": "0.0.1",
"dependencies": {
"@eva-design/eva": "^2.2.0",
"@fortawesome/fontawesome-svg-core": "^6.4.0",
"@fortawesome/free-brands-svg-icons": "^6.4.0",
"@fortawesome/free-regular-svg-icons": "^6.4.0",
"@fortawesome/free-solid-svg-icons": "^6.4.0",
"@fortawesome/react-native-fontawesome": "^0.3.0",
"@react-native-async-storage/async-storage": "^1.18.2",
"@react-navigation/bottom-tabs": "^6.5.7",
"@react-navigation/native-stack": "^6.9.12",
"@react-navigation/stack": "^6.3.16",
"@ui-kitten/components": "^5.3.1",
"@ui-kitten/eva-icons": "^5.3.1",
"buffer": "^6.0.3",
"nativewind": "^2.0.11",
"react": "18.2.0",
@ -22,7 +30,10 @@
"react-native-linear-gradient": "^2.6.2",
"react-native-safe-area-context": "^4.5.0",
"react-native-screens": "^3.20.0",
"react-native-select-dropdown": "^3.3.4",
"react-native-svg": "^13.10.0",
"react-native-vector-icons": "^9.2.0",
"react-select": "^5.7.4",
"tailwindcss": "^3.3.0"
},
"devDependencies": {
@ -1868,6 +1879,128 @@
"node": ">=0.8.0"
}
},
"node_modules/@emotion/babel-plugin": {
"version": "11.11.0",
"resolved": "https://registry.npmjs.org/@emotion/babel-plugin/-/babel-plugin-11.11.0.tgz",
"integrity": "sha512-m4HEDZleaaCH+XgDDsPF15Ht6wTLsgDTeR3WYj9Q/k76JtWhrJjcP4+/XlG8LGT/Rol9qUfOIztXeA84ATpqPQ==",
"dependencies": {
"@babel/helper-module-imports": "^7.16.7",
"@babel/runtime": "^7.18.3",
"@emotion/hash": "^0.9.1",
"@emotion/memoize": "^0.8.1",
"@emotion/serialize": "^1.1.2",
"babel-plugin-macros": "^3.1.0",
"convert-source-map": "^1.5.0",
"escape-string-regexp": "^4.0.0",
"find-root": "^1.1.0",
"source-map": "^0.5.7",
"stylis": "4.2.0"
}
},
"node_modules/@emotion/babel-plugin/node_modules/escape-string-regexp": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz",
"integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==",
"engines": {
"node": ">=10"
},
"funding": {
"url": "https://github.com/sponsors/sindresorhus"
}
},
"node_modules/@emotion/babel-plugin/node_modules/source-map": {
"version": "0.5.7",
"resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
"integrity": "sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==",
"engines": {
"node": ">=0.10.0"
}
},
"node_modules/@emotion/cache": {
"version": "11.11.0",
"resolved": "https://registry.npmjs.org/@emotion/cache/-/cache-11.11.0.tgz",
"integrity": "sha512-P34z9ssTCBi3e9EI1ZsWpNHcfY1r09ZO0rZbRO2ob3ZQMnFI35jB536qoXbkdesr5EUhYi22anuEJuyxifaqAQ==",
"dependencies": {
"@emotion/memoize": "^0.8.1",
"@emotion/sheet": "^1.2.2",
"@emotion/utils": "^1.2.1",
"@emotion/weak-memoize": "^0.3.1",
"stylis": "4.2.0"
}
},
"node_modules/@emotion/hash": {
"version": "0.9.1",
"resolved": "https://registry.npmjs.org/@emotion/hash/-/hash-0.9.1.tgz",
"integrity": "sha512-gJB6HLm5rYwSLI6PQa+X1t5CFGrv1J1TWG+sOyMCeKz2ojaj6Fnl/rZEspogG+cvqbt4AE/2eIyD2QfLKTBNlQ=="
},
"node_modules/@emotion/memoize": {
"version": "0.8.1",
"resolved": "https://registry.npmjs.org/@emotion/memoize/-/memoize-0.8.1.tgz",
"integrity": "sha512-W2P2c/VRW1/1tLox0mVUalvnWXxavmv/Oum2aPsRcoDJuob75FC3Y8FbpfLwUegRcxINtGUMPq0tFCvYNTBXNA=="
},
"node_modules/@emotion/react": {
"version": "11.11.1",
"resolved": "https://registry.npmjs.org/@emotion/react/-/react-11.11.1.tgz",
"integrity": "sha512-5mlW1DquU5HaxjLkfkGN1GA/fvVGdyHURRiX/0FHl2cfIfRxSOfmxEH5YS43edp0OldZrZ+dkBKbngxcNCdZvA==",
"dependencies": {
"@babel/runtime": "^7.18.3",
"@emotion/babel-plugin": "^11.11.0",
"@emotion/cache": "^11.11.0",
"@emotion/serialize": "^1.1.2",
"@emotion/use-insertion-effect-with-fallbacks": "^1.0.1",
"@emotion/utils": "^1.2.1",
"@emotion/weak-memoize": "^0.3.1",
"hoist-non-react-statics": "^3.3.1"
},
"peerDependencies": {
"react": ">=16.8.0"
},
"peerDependenciesMeta": {
"@types/react": {
"optional": true
}
}
},
"node_modules/@emotion/serialize": {
"version": "1.1.2",
"resolved": "https://registry.npmjs.org/@emotion/serialize/-/serialize-1.1.2.tgz",
"integrity": "sha512-zR6a/fkFP4EAcCMQtLOhIgpprZOwNmCldtpaISpvz348+DP4Mz8ZoKaGGCQpbzepNIUWbq4w6hNZkwDyKoS+HA==",
"dependencies": {
"@emotion/hash": "^0.9.1",
"@emotion/memoize": "^0.8.1",
"@emotion/unitless": "^0.8.1",
"@emotion/utils": "^1.2.1",
"csstype": "^3.0.2"
}
},
"node_modules/@emotion/sheet": {
"version": "1.2.2",
"resolved": "https://registry.npmjs.org/@emotion/sheet/-/sheet-1.2.2.tgz",
"integrity": "sha512-0QBtGvaqtWi+nx6doRwDdBIzhNdZrXUppvTM4dtZZWEGTXL/XE/yJxLMGlDT1Gt+UHH5IX1n+jkXyytE/av7OA=="
},
"node_modules/@emotion/unitless": {
"version": "0.8.1",
"resolved": "https://registry.npmjs.org/@emotion/unitless/-/unitless-0.8.1.tgz",
"integrity": "sha512-KOEGMu6dmJZtpadb476IsZBclKvILjopjUii3V+7MnXIQCYh8W3NgNcgwo21n9LXZX6EDIKvqfjYxXebDwxKmQ=="
},
"node_modules/@emotion/use-insertion-effect-with-fallbacks": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/@emotion/use-insertion-effect-with-fallbacks/-/use-insertion-effect-with-fallbacks-1.0.1.tgz",
"integrity": "sha512-jT/qyKZ9rzLErtrjGgdkMBn2OP8wl0G3sQlBb3YPryvKHsjvINUhVaPFfP+fpBcOkmrVOVEEHQFJ7nbj2TH2gw==",
"peerDependencies": {
"react": ">=16.8.0"
}
},
"node_modules/@emotion/utils": {
"version": "1.2.1",
"resolved": "https://registry.npmjs.org/@emotion/utils/-/utils-1.2.1.tgz",
"integrity": "sha512-Y2tGf3I+XVnajdItskUCn6LX+VUDmP6lTL4fcqsXAv43dnlbZiuW4MWQW38rW/BVWSE7Q/7+XQocmpnRYILUmg=="
},
"node_modules/@emotion/weak-memoize": {
"version": "0.3.1",
"resolved": "https://registry.npmjs.org/@emotion/weak-memoize/-/weak-memoize-0.3.1.tgz",
"integrity": "sha512-EsBwpc7hBUJWAsNPBmJy4hxWx12v6bshQsldrVmjxJoc3isbxhOrF2IcCpaXxfvq03NwkI7sbsOLXbYuqF/8Ww=="
},
"node_modules/@eslint-community/eslint-utils": {
"version": "4.4.0",
"resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz",
@ -1981,6 +2114,105 @@
"node": "^12.22.0 || ^14.17.0 || >=16.0.0"
}
},
"node_modules/@eva-design/dss": {
"version": "2.2.0",
"resolved": "https://registry.npmjs.org/@eva-design/dss/-/dss-2.2.0.tgz",
"integrity": "sha512-ip+iLpe8WFR1IyPGR9puJtXhkZQrWV9p+Xgg3u/3ruDNaObh/YlnfZdS0i29m6YZduW3I+lLuXSXwq5f4pAbRA=="
},
"node_modules/@eva-design/eva": {
"version": "2.2.0",
"resolved": "https://registry.npmjs.org/@eva-design/eva/-/eva-2.2.0.tgz",
"integrity": "sha512-Wh98ex5cCK+YYSQNpthX1bT4CA3zDRR1WnJv0YlyvULAkmjaEvqtoGMCXzu5DH8v1fGIggu/OpAokLS7UVPe+A=="
},
"node_modules/@eva-design/processor": {
"version": "2.2.0",
"resolved": "https://registry.npmjs.org/@eva-design/processor/-/processor-2.2.0.tgz",
"integrity": "sha512-fEvjvilmF/R9dqXDiMoaoXxrPIb5s1APVXbacXKAxjlWl231rzOxc5sdTtJPoFTTEon5KeaKwLHtbQvz5eVvIA=="
},
"node_modules/@floating-ui/core": {
"version": "1.3.1",
"resolved": "https://registry.npmjs.org/@floating-ui/core/-/core-1.3.1.tgz",
"integrity": "sha512-Bu+AMaXNjrpjh41znzHqaz3r2Nr8hHuHZT6V2LBKMhyMl0FgKA62PNYbqnfgmzOhoWZj70Zecisbo4H1rotP5g=="
},
"node_modules/@floating-ui/dom": {
"version": "1.4.5",
"resolved": "https://registry.npmjs.org/@floating-ui/dom/-/dom-1.4.5.tgz",
"integrity": "sha512-96KnRWkRnuBSSFbj0sFGwwOUd8EkiecINVl0O9wiZlZ64EkpyAOG3Xc2vKKNJmru0Z7RqWNymA+6b8OZqjgyyw==",
"dependencies": {
"@floating-ui/core": "^1.3.1"
}
},
"node_modules/@fortawesome/fontawesome-common-types": {
"version": "6.4.0",
"resolved": "https://registry.npmjs.org/@fortawesome/fontawesome-common-types/-/fontawesome-common-types-6.4.0.tgz",
"integrity": "sha512-HNii132xfomg5QVZw0HwXXpN22s7VBHQBv9CeOu9tfJnhsWQNd2lmTNi8CSrnw5B+5YOmzu1UoPAyxaXsJ6RgQ==",
"hasInstallScript": true,
"engines": {
"node": ">=6"
}
},
"node_modules/@fortawesome/fontawesome-svg-core": {
"version": "6.4.0",
"resolved": "https://registry.npmjs.org/@fortawesome/fontawesome-svg-core/-/fontawesome-svg-core-6.4.0.tgz",
"integrity": "sha512-Bertv8xOiVELz5raB2FlXDPKt+m94MQ3JgDfsVbrqNpLU9+UE2E18GKjLKw+d3XbeYPqg1pzyQKGsrzbw+pPaw==",
"hasInstallScript": true,
"dependencies": {
"@fortawesome/fontawesome-common-types": "6.4.0"
},
"engines": {
"node": ">=6"
}
},
"node_modules/@fortawesome/free-brands-svg-icons": {
"version": "6.4.0",
"resolved": "https://registry.npmjs.org/@fortawesome/free-brands-svg-icons/-/free-brands-svg-icons-6.4.0.tgz",
"integrity": "sha512-qvxTCo0FQ5k2N+VCXb/PZQ+QMhqRVM4OORiO6MXdG6bKolIojGU/srQ1ptvKk0JTbRgaJOfL2qMqGvBEZG7Z6g==",
"hasInstallScript": true,
"dependencies": {
"@fortawesome/fontawesome-common-types": "6.4.0"
},
"engines": {
"node": ">=6"
}
},
"node_modules/@fortawesome/free-regular-svg-icons": {
"version": "6.4.0",
"resolved": "https://registry.npmjs.org/@fortawesome/free-regular-svg-icons/-/free-regular-svg-icons-6.4.0.tgz",
"integrity": "sha512-ZfycI7D0KWPZtf7wtMFnQxs8qjBXArRzczABuMQqecA/nXohquJ5J/RCR77PmY5qGWkxAZDxpnUFVXKwtY/jPw==",
"hasInstallScript": true,
"dependencies": {
"@fortawesome/fontawesome-common-types": "6.4.0"
},
"engines": {
"node": ">=6"
}
},
"node_modules/@fortawesome/free-solid-svg-icons": {
"version": "6.4.0",
"resolved": "https://registry.npmjs.org/@fortawesome/free-solid-svg-icons/-/free-solid-svg-icons-6.4.0.tgz",
"integrity": "sha512-kutPeRGWm8V5dltFP1zGjQOEAzaLZj4StdQhWVZnfGFCvAPVvHh8qk5bRrU4KXnRRRNni5tKQI9PBAdI6MP8nQ==",
"hasInstallScript": true,
"dependencies": {
"@fortawesome/fontawesome-common-types": "6.4.0"
},
"engines": {
"node": ">=6"
}
},
"node_modules/@fortawesome/react-native-fontawesome": {
"version": "0.3.0",
"resolved": "https://registry.npmjs.org/@fortawesome/react-native-fontawesome/-/react-native-fontawesome-0.3.0.tgz",
"integrity": "sha512-wSfetdK4+b/pvPbM2v+bZ5hfNlwtk9l3QuJo59sbMrxJalfX7BuF2WsSIWMSxfWwSsbOtY4+TUs6uw/rE59NJA==",
"dependencies": {
"humps": "^2.0.1",
"prop-types": "^15.7.2"
},
"peerDependencies": {
"@fortawesome/fontawesome-svg-core": "~1 || ~6",
"react-native": ">= 0.67",
"react-native-svg": ">= 11.x"
}
},
"node_modules/@hapi/hoek": {
"version": "9.3.0",
"resolved": "https://registry.npmjs.org/@hapi/hoek/-/hoek-9.3.0.tgz",
@ -4725,6 +4957,11 @@
"resolved": "https://registry.npmjs.org/@types/node/-/node-18.15.11.tgz",
"integrity": "sha512-E5Kwq2n4SbMzQOn6wnmBjuK9ouqlURrcZDVfbo9ftDDTFt3nk7ZKK4GMOzoYgnpQJKcxwQw+lGaBvvlMo0qN/Q=="
},
"node_modules/@types/parse-json": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.0.tgz",
"integrity": "sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA=="
},
"node_modules/@types/prettier": {
"version": "2.7.2",
"resolved": "https://registry.npmjs.org/@types/prettier/-/prettier-2.7.2.tgz",
@ -4734,14 +4971,12 @@
"node_modules/@types/prop-types": {
"version": "15.7.5",
"resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.5.tgz",
"integrity": "sha512-JCB8C6SnDoQf0cNycqd/35A7MjcnK+ZTqE7judS6o7utxUCg6imJg3QK2qzHKszlTjcj2cn+NwMB2i96ubpj7w==",
"dev": true
"integrity": "sha512-JCB8C6SnDoQf0cNycqd/35A7MjcnK+ZTqE7judS6o7utxUCg6imJg3QK2qzHKszlTjcj2cn+NwMB2i96ubpj7w=="
},
"node_modules/@types/react": {
"version": "18.0.31",
"resolved": "https://registry.npmjs.org/@types/react/-/react-18.0.31.tgz",
"integrity": "sha512-EEG67of7DsvRDU6BLLI0p+k1GojDLz9+lZsnCpCRTa/lOokvyPBvp8S5x+A24hME3yyQuIipcP70KJ6H7Qupww==",
"dev": true,
"dependencies": {
"@types/prop-types": "*",
"@types/scheduler": "*",
@ -4776,11 +5011,18 @@
"@types/react": "*"
}
},
"node_modules/@types/react-transition-group": {
"version": "4.4.6",
"resolved": "https://registry.npmjs.org/@types/react-transition-group/-/react-transition-group-4.4.6.tgz",
"integrity": "sha512-VnCdSxfcm08KjsJVQcfBmhEQAPnLB8G08hAxn39azX1qYBQ/5RVQuoHuKIcfKOdncuaUvEpFKFzEvbtIMsfVew==",
"dependencies": {
"@types/react": "*"
}
},
"node_modules/@types/scheduler": {
"version": "0.16.3",
"resolved": "https://registry.npmjs.org/@types/scheduler/-/scheduler-0.16.3.tgz",
"integrity": "sha512-5cJ8CB4yAx7BH1oMvdU0Jh9lrEXyPkar6F9G/ERswkCuvP4KQZfZkSjcMbAICCpQTN4OuZn8tz0HiKv9TGZgrQ==",
"dev": true
"integrity": "sha512-5cJ8CB4yAx7BH1oMvdU0Jh9lrEXyPkar6F9G/ERswkCuvP4KQZfZkSjcMbAICCpQTN4OuZn8tz0HiKv9TGZgrQ=="
},
"node_modules/@types/semver": {
"version": "7.3.13",
@ -5105,6 +5347,57 @@
"url": "https://opencollective.com/eslint"
}
},
"node_modules/@ui-kitten/components": {
"version": "5.3.1",
"resolved": "https://registry.npmjs.org/@ui-kitten/components/-/components-5.3.1.tgz",
"integrity": "sha512-Oj1WePUQtpNfH7ftXGdkkFVmJI+JcR3cBryPJV0E+JAUdH2dbJ0oG/VA+UAgk27/u0K0OZSUkdMFuGnkDAVuYA==",
"dependencies": {
"@eva-design/dss": "^2.2.0",
"@eva-design/processor": "^2.2.0",
"fecha": "3.0.3",
"hoist-non-react-statics": "^3.2.1",
"lodash.merge": "^4.6.1"
},
"peerDependencies": {
"react-native-svg": "*"
}
},
"node_modules/@ui-kitten/eva-icons": {
"version": "5.3.1",
"resolved": "https://registry.npmjs.org/@ui-kitten/eva-icons/-/eva-icons-5.3.1.tgz",
"integrity": "sha512-7pFbEiF2vdcMGbb/6/vg0Xy/hZ3js4nFNjZTNEQPaynnndstabNW0MSRokPWYaW6EcxP77LVOsfdShtjQm7kIg==",
"dependencies": {
"react-native-eva-icons": "^1.3.1"
},
"peerDependencies": {
"@ui-kitten/components": "5.3.1",
"react-native-svg": "*"
}
},
"node_modules/@ui-kitten/eva-icons/node_modules/react": {
"version": "16.5.0",
"resolved": "https://registry.npmjs.org/react/-/react-16.5.0.tgz",
"integrity": "sha512-nw/yB/L51kA9PsAy17T1JrzzGRk+BlFCJwFF7p+pwVxgqwPjYNeZEkkH7LXn9dmflolrYMXLWMTkQ77suKPTNQ==",
"peer": true,
"dependencies": {
"loose-envify": "^1.1.0",
"object-assign": "^4.1.1",
"prop-types": "^15.6.2",
"schedule": "^0.3.0"
},
"engines": {
"node": ">=0.10.0"
}
},
"node_modules/@ui-kitten/eva-icons/node_modules/react-native-eva-icons": {
"version": "1.3.1",
"resolved": "https://registry.npmjs.org/react-native-eva-icons/-/react-native-eva-icons-1.3.1.tgz",
"integrity": "sha512-emd/aYXuOacuDVTx0SJoLi+xsOdCNdljQB3PTNCM9AQ3m/smG0X1TN0+ihelPO7MqoHzaH0h6lbANtwxGUy8Fw==",
"peerDependencies": {
"react": "16.5.0",
"react-native-svg": "^9.4.0"
}
},
"node_modules/abort-controller": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/abort-controller/-/abort-controller-3.0.0.tgz",
@ -5571,6 +5864,35 @@
"node": "^14.15.0 || ^16.10.0 || >=18.0.0"
}
},
"node_modules/babel-plugin-macros": {
"version": "3.1.0",
"resolved": "https://registry.npmjs.org/babel-plugin-macros/-/babel-plugin-macros-3.1.0.tgz",
"integrity": "sha512-Cg7TFGpIr01vOQNODXOOaGz2NpCU5gl8x1qJFbb6hbZxR7XrcE2vtbAsTAbJ7/xwJtUuJEw8K8Zr/AE0LHlesg==",
"dependencies": {
"@babel/runtime": "^7.12.5",
"cosmiconfig": "^7.0.0",
"resolve": "^1.19.0"
},
"engines": {
"node": ">=10",
"npm": ">=6"
}
},
"node_modules/babel-plugin-macros/node_modules/cosmiconfig": {
"version": "7.1.0",
"resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.1.0.tgz",
"integrity": "sha512-AdmX6xUzdNASswsFtmwSt7Vj8po9IuqXm0UXz7QKPuEUmPB4XyjGfaAr2PSuELMwkRMVH1EpIkX5bTZGRB3eCA==",
"dependencies": {
"@types/parse-json": "^4.0.0",
"import-fresh": "^3.2.1",
"parse-json": "^5.0.0",
"path-type": "^4.0.0",
"yaml": "^1.10.0"
},
"engines": {
"node": ">=10"
}
},
"node_modules/babel-plugin-polyfill-corejs2": {
"version": "0.3.3",
"resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.3.3.tgz",
@ -5781,6 +6103,11 @@
"ieee754": "^1.1.13"
}
},
"node_modules/boolbase": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz",
"integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww=="
},
"node_modules/brace-expansion": {
"version": "1.1.11",
"resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
@ -5938,7 +6265,6 @@
"version": "3.1.0",
"resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz",
"integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==",
"dev": true,
"engines": {
"node": ">=6"
}
@ -6493,6 +6819,21 @@
"resolved": "https://registry.npmjs.org/css-mediaquery/-/css-mediaquery-0.1.2.tgz",
"integrity": "sha512-COtn4EROW5dBGlE/4PiKnh6rZpAPxDeFLaEEwt4i10jpDMFt2EhQGS79QmmrO+iKCHv0PU/HrOWEhijFd1x99Q=="
},
"node_modules/css-select": {
"version": "5.1.0",
"resolved": "https://registry.npmjs.org/css-select/-/css-select-5.1.0.tgz",
"integrity": "sha512-nwoRF1rvRRnnCqqY7updORDsuqKzqYJ28+oSMaJMMgOauh3fvwHqMS7EZpIPqK8GL+g9mKxF1vP/ZjSeNjEVHg==",
"dependencies": {
"boolbase": "^1.0.0",
"css-what": "^6.1.0",
"domhandler": "^5.0.2",
"domutils": "^3.0.1",
"nth-check": "^2.0.1"
},
"funding": {
"url": "https://github.com/sponsors/fb55"
}
},
"node_modules/css-to-react-native": {
"version": "3.2.0",
"resolved": "https://registry.npmjs.org/css-to-react-native/-/css-to-react-native-3.2.0.tgz",
@ -6503,6 +6844,29 @@
"postcss-value-parser": "^4.0.2"
}
},
"node_modules/css-tree": {
"version": "1.1.3",
"resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.1.3.tgz",
"integrity": "sha512-tRpdppF7TRazZrjJ6v3stzv93qxRcSsFmW6cX0Zm2NVKpxE1WV1HblnghVv9TreireHkqI/VDEsfolRF1p6y7Q==",
"dependencies": {
"mdn-data": "2.0.14",
"source-map": "^0.6.1"
},
"engines": {
"node": ">=8.0.0"
}
},
"node_modules/css-what": {
"version": "6.1.0",
"resolved": "https://registry.npmjs.org/css-what/-/css-what-6.1.0.tgz",
"integrity": "sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==",
"engines": {
"node": ">= 6"
},
"funding": {
"url": "https://github.com/sponsors/fb55"
}
},
"node_modules/cssesc": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz",
@ -6517,8 +6881,7 @@
"node_modules/csstype": {
"version": "3.1.1",
"resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.1.tgz",
"integrity": "sha512-DJR/VvkAvSZW9bTouZue2sSxDwdTN92uHjqeKVm+0dAqdfNykRzQ95tay8aXMBAAPpUiq4Qcug2L7neoRh2Egw==",
"dev": true
"integrity": "sha512-DJR/VvkAvSZW9bTouZue2sSxDwdTN92uHjqeKVm+0dAqdfNykRzQ95tay8aXMBAAPpUiq4Qcug2L7neoRh2Egw=="
},
"node_modules/dayjs": {
"version": "1.11.7",
@ -6701,6 +7064,66 @@
"node": ">=6.0.0"
}
},
"node_modules/dom-helpers": {
"version": "5.2.1",
"resolved": "https://registry.npmjs.org/dom-helpers/-/dom-helpers-5.2.1.tgz",
"integrity": "sha512-nRCa7CK3VTrM2NmGkIy4cbK7IZlgBE/PYMn55rrXefr5xXDP0LdtfPnblFDoVdcAfslJ7or6iqAUnx0CCGIWQA==",
"dependencies": {
"@babel/runtime": "^7.8.7",
"csstype": "^3.0.2"
}
},
"node_modules/dom-serializer": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-2.0.0.tgz",
"integrity": "sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==",
"dependencies": {
"domelementtype": "^2.3.0",
"domhandler": "^5.0.2",
"entities": "^4.2.0"
},
"funding": {
"url": "https://github.com/cheeriojs/dom-serializer?sponsor=1"
}
},
"node_modules/domelementtype": {
"version": "2.3.0",
"resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz",
"integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==",
"funding": [
{
"type": "github",
"url": "https://github.com/sponsors/fb55"
}
]
},
"node_modules/domhandler": {
"version": "5.0.3",
"resolved": "https://registry.npmjs.org/domhandler/-/domhandler-5.0.3.tgz",
"integrity": "sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==",
"dependencies": {
"domelementtype": "^2.3.0"
},
"engines": {
"node": ">= 4"
},
"funding": {
"url": "https://github.com/fb55/domhandler?sponsor=1"
}
},
"node_modules/domutils": {
"version": "3.1.0",
"resolved": "https://registry.npmjs.org/domutils/-/domutils-3.1.0.tgz",
"integrity": "sha512-H78uMmQtI2AhgDJjWeQmHwJJ2bLPD3GMmO7Zja/ZZh84wkm+4ut+IUnUdRa8uCGX88DiVx1j6FRe1XfxEgjEZA==",
"dependencies": {
"dom-serializer": "^2.0.0",
"domelementtype": "^2.3.0",
"domhandler": "^5.0.3"
},
"funding": {
"url": "https://github.com/fb55/domutils?sponsor=1"
}
},
"node_modules/ee-first": {
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz",
@ -6744,6 +7167,17 @@
"once": "^1.4.0"
}
},
"node_modules/entities": {
"version": "4.5.0",
"resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz",
"integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==",
"engines": {
"node": ">=0.12"
},
"funding": {
"url": "https://github.com/fb55/entities?sponsor=1"
}
},
"node_modules/envinfo": {
"version": "7.8.1",
"resolved": "https://registry.npmjs.org/envinfo/-/envinfo-7.8.1.tgz",
@ -7776,6 +8210,11 @@
"bser": "2.1.1"
}
},
"node_modules/fecha": {
"version": "3.0.3",
"resolved": "https://registry.npmjs.org/fecha/-/fecha-3.0.3.tgz",
"integrity": "sha512-6LQK/1jud/FZnfEEZJ7y81vw7ge81DNd/XEsX0hgMUjhS+QMljkb1C0czBaP7dMNRVrd5mw/J2J7qI2Nw+TWZw=="
},
"node_modules/file-entry-cache": {
"version": "6.0.1",
"resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz",
@ -7938,6 +8377,11 @@
"semver": "bin/semver"
}
},
"node_modules/find-root": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/find-root/-/find-root-1.1.0.tgz",
"integrity": "sha512-NKfW6bec6GfKc0SGx1e07QZY9PE99u0Bft/0rzSD5k3sO/vwkVUpDUKVm5Gpp5Ue3YfShPFTX2070tDs5kB9Ng=="
},
"node_modules/find-up": {
"version": "4.1.0",
"resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz",
@ -8467,6 +8911,11 @@
"node": ">=10.17.0"
}
},
"node_modules/humps": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/humps/-/humps-2.0.1.tgz",
"integrity": "sha512-E0eIbrFWUhwfXJmsbdjRQFQPrl5pTEoKlz163j1mTqqUnU9PgR4AgB8AIITzuB3vLBdxZXyZ9TDIrwB2OASz4g=="
},
"node_modules/ieee754": {
"version": "1.2.1",
"resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz",
@ -8510,7 +8959,6 @@
"version": "3.3.0",
"resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz",
"integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==",
"dev": true,
"dependencies": {
"parent-module": "^1.0.0",
"resolve-from": "^4.0.0"
@ -8526,7 +8974,6 @@
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz",
"integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==",
"dev": true,
"engines": {
"node": ">=4"
}
@ -10990,8 +11437,7 @@
"node_modules/json-parse-even-better-errors": {
"version": "2.3.1",
"resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz",
"integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==",
"dev": true
"integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w=="
},
"node_modules/json-schema-traverse": {
"version": "0.4.1",
@ -11111,8 +11557,7 @@
"node_modules/lodash.merge": {
"version": "4.6.2",
"resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz",
"integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==",
"dev": true
"integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ=="
},
"node_modules/lodash.throttle": {
"version": "4.1.1",
@ -11363,6 +11808,11 @@
"node": ">=0.10.0"
}
},
"node_modules/mdn-data": {
"version": "2.0.14",
"resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.14.tgz",
"integrity": "sha512-dn6wd0uw5GsdswPFfsgMp5NSB0/aDe6fK94YJV/AJDYXL6HVLWBsxeq7js7Ad+mU2K9LAlwpk6kN2D5mwCPVow=="
},
"node_modules/memoize-one": {
"version": "5.2.1",
"resolved": "https://registry.npmjs.org/memoize-one/-/memoize-one-5.2.1.tgz",
@ -12477,6 +12927,17 @@
"node": ">=8"
}
},
"node_modules/nth-check": {
"version": "2.1.1",
"resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.1.1.tgz",
"integrity": "sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==",
"dependencies": {
"boolbase": "^1.0.0"
},
"funding": {
"url": "https://github.com/fb55/nth-check?sponsor=1"
}
},
"node_modules/nullthrows": {
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/nullthrows/-/nullthrows-1.1.1.tgz",
@ -12922,7 +13383,6 @@
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz",
"integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==",
"dev": true,
"dependencies": {
"callsites": "^3.0.0"
},
@ -12934,7 +13394,6 @@
"version": "5.2.0",
"resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz",
"integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==",
"dev": true,
"dependencies": {
"@babel/code-frame": "^7.0.0",
"error-ex": "^1.3.1",
@ -12998,7 +13457,6 @@
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz",
"integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==",
"dev": true,
"engines": {
"node": ">=8"
}
@ -13448,6 +13906,19 @@
}
}
},
"node_modules/react-dom": {
"version": "18.2.0",
"resolved": "https://registry.npmjs.org/react-dom/-/react-dom-18.2.0.tgz",
"integrity": "sha512-6IMTriUmvsjHUjNtEDudZfuDQUoWXVxKHhlEGSk81n4YFS+r/Kl99wXiwlVXtPBtJenozv2P+hxDsw9eA7Xo6g==",
"peer": true,
"dependencies": {
"loose-envify": "^1.1.0",
"scheduler": "^0.23.0"
},
"peerDependencies": {
"react": "^18.2.0"
}
},
"node_modules/react-freeze": {
"version": "1.0.3",
"resolved": "https://registry.npmjs.org/react-freeze/-/react-freeze-1.0.3.tgz",
@ -13612,6 +14083,24 @@
"react-native": "*"
}
},
"node_modules/react-native-select-dropdown": {
"version": "3.3.4",
"resolved": "https://registry.npmjs.org/react-native-select-dropdown/-/react-native-select-dropdown-3.3.4.tgz",
"integrity": "sha512-Ld6BGGgCnbiv7uORAP+KnvDQiqeuqdlasKk9woJH9XtFMD44rwjKwelGzsDxFUM9hIAwZdac4UAFmOmXRaMeRg=="
},
"node_modules/react-native-svg": {
"version": "13.10.0",
"resolved": "https://registry.npmjs.org/react-native-svg/-/react-native-svg-13.10.0.tgz",
"integrity": "sha512-D/oYTmUi5nsA/2Nw4WYlF1UUi3vZqhpESpiEhpYCIFB/EMd6vz4A/uq3tIzZFcfa5z2oAdGSxRU1TaYr8IcPlQ==",
"dependencies": {
"css-select": "^5.1.0",
"css-tree": "^1.1.3"
},
"peerDependencies": {
"react": "*",
"react-native": "*"
}
},
"node_modules/react-native-vector-icons": {
"version": "9.2.0",
"resolved": "https://registry.npmjs.org/react-native-vector-icons/-/react-native-vector-icons-9.2.0.tgz",
@ -13774,6 +14263,31 @@
"node": ">=0.10.0"
}
},
"node_modules/react-select": {
"version": "5.7.4",
"resolved": "https://registry.npmjs.org/react-select/-/react-select-5.7.4.tgz",
"integrity": "sha512-NhuE56X+p9QDFh4BgeygHFIvJJszO1i1KSkg/JPcIJrbovyRtI+GuOEa4XzFCEpZRAEoEI8u/cAHK+jG/PgUzQ==",
"dependencies": {
"@babel/runtime": "^7.12.0",
"@emotion/cache": "^11.4.0",
"@emotion/react": "^11.8.1",
"@floating-ui/dom": "^1.0.1",
"@types/react-transition-group": "^4.4.0",
"memoize-one": "^6.0.0",
"prop-types": "^15.6.0",
"react-transition-group": "^4.3.0",
"use-isomorphic-layout-effect": "^1.1.2"
},
"peerDependencies": {
"react": "^16.8.0 || ^17.0.0 || ^18.0.0",
"react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0"
}
},
"node_modules/react-select/node_modules/memoize-one": {
"version": "6.0.0",
"resolved": "https://registry.npmjs.org/memoize-one/-/memoize-one-6.0.0.tgz",
"integrity": "sha512-rkpe71W0N0c0Xz6QD0eJETuWAJGnJ9afsl1srmwPrI+yBCkge5EycXXbYRyvL29zZVUWQCY7InPRCv3GDXuZNw=="
},
"node_modules/react-shallow-renderer": {
"version": "16.15.0",
"resolved": "https://registry.npmjs.org/react-shallow-renderer/-/react-shallow-renderer-16.15.0.tgz",
@ -13800,6 +14314,21 @@
"react": "^18.2.0"
}
},
"node_modules/react-transition-group": {
"version": "4.4.5",
"resolved": "https://registry.npmjs.org/react-transition-group/-/react-transition-group-4.4.5.tgz",
"integrity": "sha512-pZcd1MCJoiKiBR2NRxeCRg13uCXbydPnmB4EOeRrY7480qNWO8IIgQG6zlDkm6uRMsURXPuKq0GWtiM59a5Q6g==",
"dependencies": {
"@babel/runtime": "^7.5.5",
"dom-helpers": "^5.0.1",
"loose-envify": "^1.4.0",
"prop-types": "^15.6.2"
},
"peerDependencies": {
"react": ">=16.6.0",
"react-dom": ">=16.6.0"
}
},
"node_modules/read-cache": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/read-cache/-/read-cache-1.0.0.tgz",
@ -14125,6 +14654,15 @@
"url": "https://github.com/sponsors/ljharb"
}
},
"node_modules/schedule": {
"version": "0.3.0",
"resolved": "https://registry.npmjs.org/schedule/-/schedule-0.3.0.tgz",
"integrity": "sha512-20+1KVo517sR7Nt+bYBN8a+bEJDKLPEx7Ohtts1kX05E4/HY53YUNuhfkVNItmWAnBYHcpG9vsd2/CJxG+aPCQ==",
"peer": true,
"dependencies": {
"object-assign": "^4.1.1"
}
},
"node_modules/scheduler": {
"version": "0.23.0",
"resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.23.0.tgz",
@ -14958,6 +15496,11 @@
"resolved": "https://registry.npmjs.org/strnum/-/strnum-1.0.5.tgz",
"integrity": "sha512-J8bbNyKKXl5qYcR36TIO8W3mVGVHrmmxsd5PAItGkmyzwJvybiw2IVq5nqd0i4LSNSkB/sx9VHllbfFdr9k1JA=="
},
"node_modules/stylis": {
"version": "4.2.0",
"resolved": "https://registry.npmjs.org/stylis/-/stylis-4.2.0.tgz",
"integrity": "sha512-Orov6g6BB1sDfYgzWfTHDOxamtX1bE/zo104Dh9e6fqJ3PooipYyfJ0pUmrZO2wAvO8YbEyeFrkV91XTsGMSrw=="
},
"node_modules/sucrase": {
"version": "3.31.0",
"resolved": "https://registry.npmjs.org/sucrase/-/sucrase-3.31.0.tgz",
@ -15587,6 +16130,19 @@
"node": ">=0.10.0"
}
},
"node_modules/use-isomorphic-layout-effect": {
"version": "1.1.2",
"resolved": "https://registry.npmjs.org/use-isomorphic-layout-effect/-/use-isomorphic-layout-effect-1.1.2.tgz",
"integrity": "sha512-49L8yCO3iGT/ZF9QttjwLF/ZD9Iwto5LnH5LmEdk/6cFmXddqi2ulF0edxTwjj+7mqvpVVGQWvbXZdn32wRSHA==",
"peerDependencies": {
"react": "^16.8.0 || ^17.0.0 || ^18.0.0"
},
"peerDependenciesMeta": {
"@types/react": {
"optional": true
}
}
},
"node_modules/use-latest-callback": {
"version": "0.1.5",
"resolved": "https://registry.npmjs.org/use-latest-callback/-/use-latest-callback-0.1.5.tgz",

@ -10,10 +10,18 @@
"test": "jest"
},
"dependencies": {
"@eva-design/eva": "^2.2.0",
"@fortawesome/fontawesome-svg-core": "^6.4.0",
"@fortawesome/free-brands-svg-icons": "^6.4.0",
"@fortawesome/free-regular-svg-icons": "^6.4.0",
"@fortawesome/free-solid-svg-icons": "^6.4.0",
"@fortawesome/react-native-fontawesome": "^0.3.0",
"@react-native-async-storage/async-storage": "^1.18.2",
"@react-navigation/bottom-tabs": "^6.5.7",
"@react-navigation/native-stack": "^6.9.12",
"@react-navigation/stack": "^6.3.16",
"@ui-kitten/components": "^5.3.1",
"@ui-kitten/eva-icons": "^5.3.1",
"buffer": "^6.0.3",
"nativewind": "^2.0.11",
"react": "18.2.0",
@ -24,7 +32,10 @@
"react-native-linear-gradient": "^2.6.2",
"react-native-safe-area-context": "^4.5.0",
"react-native-screens": "^3.20.0",
"react-native-select-dropdown": "^3.3.4",
"react-native-svg": "^13.10.0",
"react-native-vector-icons": "^9.2.0",
"react-select": "^5.7.4",
"tailwindcss": "^3.3.0"
},
"devDependencies": {

@ -26,7 +26,7 @@ export const Input:FC <Props> = ({name,label, control}) => {
value={field.value}
onChangeText={field.onChange}
placeholder={label}
className='p-2 m-2 w-max border rounded-xl focus:outline-offset-4 focus:outline-sky-500 focus:border-solid border-sky-500'
className='p-2 m-2 w-max border rounded-xl border-sky-500'
/>
</View>

@ -0,0 +1,43 @@
import React from 'react';
import { FC } from 'react'
import { useController } from 'react-hook-form';
import { Datepicker, Icon, IconElement, Layout } from '@ui-kitten/components';
interface Props {
name: string,
label: string,
control: any
}
const CalendarIcon = (props:any): IconElement => (
<Icon
{...props}
name='calendar'
/>
);
export const InputDate: FC<Props> = ({ name, label, control }) => {
const { field } = useController({
control,
defaultValue: 0.0,
name,
})
return (
<>
<Layout className='flex flex-col' level='1'>
<Datepicker
label={''}
caption='Caption'
placeholder='Pick Date'
date={new Date(field.value)}
onSelect={field.onChange}
accessoryRight={CalendarIcon}
className='p-2 m-2 w-max border rounded-xl border-sky-500'
/>
</Layout>
</>
)
}

@ -0,0 +1,34 @@
import React from 'react';
import { FC } from 'react'
import { useController } from 'react-hook-form';
import { Text, TextInput, View } from 'react-native';
interface Props {
name: string,
label: string,
control: any
}
export const InputNumber: FC<Props> = ({ name, label, control }) => {
const { field } = useController({
control,
defaultValue: 0.0,
name,
})
return (
<>
<View className='flex flex-col'>
<TextInput
id={name}
value={String(field.value)}
onChangeText={field.onChange}
placeholder={label}
keyboardType="numeric"
className='p-2 m-2 w-max border rounded-xl border-sky-500'
/>
</View>
</>
)
}

@ -0,0 +1,62 @@
import React, { useEffect, useState, FC } from 'react';
import { View } from 'react-native';
import { IndexPath, Select, SelectItem } from '@ui-kitten/components';
import { Controller} from 'react-hook-form';
import { useFetchWithAuth } from '../hooks/useFetchWithAuth';
interface Props {
entity: string,
control: any,
columname: string,
columnvalue:string
}
export const ManyToOne: FC<Props> = ({ entity, control,columname,columnvalue }) => {
const [values, setValues] = useState([{id:0, columnvalue: 'Seleccione'}]);
const [selectedIndex] = React.useState<IndexPath | IndexPath[]>(new IndexPath(0));
useEffect(() => {
async function fetchData() {
try {
const { data, error } = await useFetchWithAuth(entity.toLowerCase());
const result = data as {id: number, columnvalue: string}[]
setValues (result);
} catch (error) {
console.error(error);
}
}
fetchData();
}, [entity]);
return (
<>
<View className='flex flex-col py-2'>
<Controller
name={columname}
control={control}
render={({ field: {onChange,value} }) =>
<Select
status='info'
selectedIndex={selectedIndex}
value={value ? value.nombre : "Seleccione"}
onSelect={(index) => {
onChange(values[(index as IndexPath).row])
}}>
{values.map((item) => (
<SelectItem
key={`select-option-${item.id}`}
title={(item as { [columnvalue: string]: any }) [columnvalue]}
/>
))}
</Select>
}
/>
</View>
</>
)
}

@ -7,37 +7,41 @@ import { NativeStackNavigationProp } from '@react-navigation/native-stack';
interface Props {
entities: [],
screenName: string
screenName: string,
columnDisplay: string
}
export const CardList:FC <Props> = ({entities, screenName}) => {
export const CardList: FC<Props> = ({ entities, screenName, columnDisplay }) => {
const navitation = useNavigation<NativeStackNavigationProp<any>>();
return (
<>
<FlatList
data={entities}
renderItem={({item}) =>
<CardItem>
<TouchableOpacity
onPress={()=>
navitation
.navigate(screenName , {id:item['id']} )}
>
<Text>
{item["nombre"]}
</Text>
</TouchableOpacity>
</CardItem>
}
keyExtractor={item => item["id"]}
/>
</>
)
return (
<>
<FlatList
data={entities}
renderItem={({ item }) =>
<TouchableOpacity
onPress={() =>
navitation
.navigate(screenName, { id: item['id'] })}
>
<CardItem>
<Text>
{item[columnDisplay]}
</Text>
</CardItem>
</TouchableOpacity>
}
keyExtractor={item => item["id"]}
/>
</>
)
}

@ -0,0 +1,55 @@
import React, { FC, useEffect, useState } from 'react'
import { FlatList, RefreshControl, Text, TouchableOpacity, View } from 'react-native'
import { useNavigation } from '@react-navigation/native';
import { CardItem } from '../CardItem';
import { NativeStackNavigationProp } from '@react-navigation/native-stack';
import { Avatar, Layout } from '@ui-kitten/components';
interface Props {
entities: [],
screenName: string,
columnDisplay: string
}
export const ProductCardList: FC<Props> = ({ entities, screenName, columnDisplay }) => {
const navitation = useNavigation<NativeStackNavigationProp<any>>();
return (
<>
<FlatList
data={entities}
renderItem={({ item }) =>
<TouchableOpacity
onPress={() =>
navitation
.navigate(screenName, { id: item['id'] })}
>
<CardItem>
<View className='flex-row'>
<Avatar
size='giant'
source={{uri:'https://images.philips.com/is/image/PhilipsConsumer/271V8_69-IMS-en_HK?$jpglarge$&wid=1250'}}
/>
<Text className='mx-4'>
{item[columnDisplay]}
</Text>
</View>
</CardItem>
</TouchableOpacity>
}
keyExtractor={item => item["id"]}
/>
</>
)
}

@ -23,7 +23,8 @@ export const MainStackNavitagor:FC = () => {
}}
>
{isAuthenticated==false?(
<>
<>
{/*LoginScreen*/}
<Stack.Screen name="LoginScreen" component={LoginScreen} />
</>

@ -1,17 +1,13 @@
import { FC } from 'react'
import { Dimensions, Text, View } from 'react-native'
import { Dimensions, View } from 'react-native'
import { createBottomTabNavigator } from '@react-navigation/bottom-tabs';
import MaterialCommunityIcons from 'react-native-vector-icons/MaterialCommunityIcons';
import { CompanyScreen } from '../screens/company/CompanyScreen';
import { MenuItem } from '../components/navbar/MenuItem';
import { TabItem } from '../components/navbar/TabItem';
import { SalesOrderScreen } from '../screens/salesorder/SalesOrderScreen';
import { ProductScreen } from '../screens/product/ProductScreen';
import { SalesOrderStack } from '../screens/salesorder/SalesOrderStack';
import { ExitScreen } from '../screens/exit/ExitScreen';
import { CustomerListScreen } from '../screens/customer/CustomerListScreen';
import { CustomerStack } from '../screens/customer/CustomerStack';
import CompanyStack from '../screens/company/CompanyStack';
import { CompanyStack } from '../screens/company/CompanyStack';
import { ProductStack } from '../screens/product/ProductStack';
interface Props {
@ -25,7 +21,7 @@ export const TabScreen:FC <Props> = () => {
className="h-screen"
>
<Tab.Navigator
initialRouteName="SalesOrderScreen"
initialRouteName="SalesOrderStack"
screenOptions={{
headerShown: false,
tabBarActiveTintColor: '#1e40af',
@ -59,8 +55,8 @@ export const TabScreen:FC <Props> = () => {
}}
/>
<Tab.Screen
name="SalesOrderScreen"
component={SalesOrderScreen}
name="SalesOrderStack"
component={SalesOrderStack}
options={{
tabBarLabel: 'Pedidos',
tabBarIcon: ({ focused }) => (
@ -70,7 +66,7 @@ export const TabScreen:FC <Props> = () => {
/>
<Tab.Screen
name="ProductScreen"
component={ProductScreen}
component={ProductStack}
options={{
tabBarLabel: 'Productos',
tabBarIcon: ({ focused }) => (

@ -1,8 +1,89 @@
const CompanyFormScreen = () => {
return(
<>
</>
)
}
export default CompanyFormScreen;
import { useEffect } from 'react'
import { Text } from 'react-native'
import { Background } from '../../components/Background'
import { Button } from '../../components/Button';
import { Card } from '../../components/Card';
import { Input } from '../../components/Input';
import { useForm } from 'react-hook-form';
import { NativeStackScreenProps } from '@react-navigation/native-stack';
import { RootStackParams } from './CompanyStack';
import { useFetchWithAuth } from '../../hooks/useFetchWithAuth';
import { saveWithAuth } from '../../hooks/saveWithAuth';
import { ManyToOne } from '../../components/ManyToOne';
interface Props extends NativeStackScreenProps<RootStackParams, 'CompanyFormScreen'> { };
export const CompanyFormScreen = ({ route, navigation }: Props) => {
const { control, handleSubmit, setValue, formState: { errors } } = useForm({
defaultValues: {
id: 0,
nombre: '',
ruc: '',
direccion: ''
}
});
let id: string = "0";
if (route.params?.id != undefined) {
id = String(route.params.id);
}
const getInitData = async () => {
if (!id || id == "0")
return;
const { data, error } = await useFetchWithAuth("compania/" + id);
if (!error) {
if (data.id != 0) {
setValue("id", data['id'])
setValue("nombre", data['nombre'])
setValue("ruc", data['ruc'])
setValue("direccion", data['direccion'])
}
} else {
console.log(error)
}
}
useEffect(() => {
getInitData();
}, [])
const onSubmit = async (entity: any) => {
try {
let endpoint = "compania";
//entity['compania'] = { id: entity['compania'].id }
const { data, error } = await saveWithAuth(endpoint, id, entity);
if (error) {
console.log(error);
} else {
navigation.navigate("CompanyListScreen")
}
} catch (e) {
console.log("Post error:");
console.table(e);
}
}
return (
<>
<Background >
<Card>
<Text className='text-xl text-center my-4'>Registro de clientes</Text>
<Input name="ruc" label='RUC' control={control} />
<Input name="nombre" label='Nombre' control={control} />
<Input name="direccion" label='Dirección' control={control} />
<Button
title='Guardar'
onPress={handleSubmit(onSubmit)}
/>
</Card>
</Background>
</>
)
}

@ -1,12 +1,63 @@
import { Text } from "react-native";
import { useEffect, useState } from 'react'
import { FlatList, RefreshControl, Text, View } from 'react-native'
import { useNavigation } from '@react-navigation/native';
import { Card } from '../../components/Card'
import { CardList } from '../../components/cardList/CardList'
import { Button } from '../../components/Button'
import { useFetchWithAuth } from '../../hooks/useFetchWithAuth'
const CompanyListScreen = () => {
export const CompanyListScreen = () => {
const navigation = useNavigation();
const [refreshing, setRefreshing] = useState(false);
const endpoints = "compania";
let defaultData: [] = [];
const [entities, setEntities] = useState(defaultData);
const getInitData = async () => {
const { data, error } = await useFetchWithAuth(endpoints);
if (!error) {
setEntities(data);
} else {
console.log(error)
}
}
useEffect(() => {
getInitData();
}, [refreshing])
const onRefresh = () => {
setRefreshing(true);
setTimeout(() => {
setRefreshing(false);
}, 1000);
};
return (
<>
<Text>Compañia lista</Text>
</>
<View className='bg-sky-100'>
<Button
title=' + '
additionalStyle='z-10 absolute bottom-2 right-0'
onPress={() => navigation.navigate("CompanyFormScreen" as never)} />
<FlatList
refreshControl={
<RefreshControl
refreshing={refreshing}
onRefresh={onRefresh}
/>
}
data={[""]}
renderItem={({ item }) =>
<View id={item} className='flex-1 items-center'>
<Card>
<Text className='text-xl text-center my-4'>Listado de compania</Text>
<CardList screenName="CompanyFormScreen" columnDisplay="nombre" entities={entities} />
</Card>
</View>
}
keyExtractor={item => item}
/>
</View>
)
}
export default CompanyListScreen;
}

@ -1,13 +0,0 @@
import { FC } from 'react'
import { Text } from 'react-native'
interface Props {
}
export const CompanyScreen:FC <Props> = () => {
return (
<>
<Text>Compañia</Text>
</>
)
}

@ -1,24 +1,30 @@
import { createNativeStackNavigator } from "@react-navigation/native-stack";
import CompanyListScreen from "./CompanyListScreen";
import CompanyFormScreen from "./CompanyFormScreen";
import { useContext } from 'react'
import { createNativeStackNavigator } from '@react-navigation/native-stack';
import { AuthContext } from '../login/AuthContext';
import { CompanyFormScreen } from './CompanyFormScreen';
import { CompanyListScreen } from './CompanyListScreen';
const Stack = createNativeStackNavigator();
export type RootStackParams = {
CompanyListScreen: undefined,
CompanyFormScreen: { id: number }
}
const Stack = createNativeStackNavigator<RootStackParams>();
const CompanyStack = () => {
export const CompanyStack = () => {
const { isAuthenticated } = useContext(AuthContext)
return(
return (
<Stack.Navigator
screenOptions={
{
headerShown:true
}
}
screenOptions={{
headerShown: true,
}}
>
<Stack.Screen name="CompanyListScreen" component={CompanyListScreen} />
<Stack.Screen name="CompanyFormScreen" component={CompanyFormScreen}/>
{isAuthenticated && (
<>
<Stack.Screen name="CompanyListScreen" component={CompanyListScreen} />
<Stack.Screen name="CompanyFormScreen" component={CompanyFormScreen} />
</>
)}
</Stack.Navigator>
)
}
export default CompanyStack;
}

@ -1,8 +1,6 @@
import { FC, useEffect } from 'react'
import { useEffect } from 'react'
import { Text } from 'react-native'
import { NavBar } from '../../components/navbar/NavBar'
import { Background } from '../../components/Background'
import { useNavigation } from '@react-navigation/native';
import { Button } from '../../components/Button';
import { Card } from '../../components/Card';
import { Input } from '../../components/Input';
@ -11,81 +9,80 @@ import { NativeStackScreenProps } from '@react-navigation/native-stack';
import { RootStackParams } from './CustomerStack';
import { useFetchWithAuth } from '../../hooks/useFetchWithAuth';
import { saveWithAuth } from '../../hooks/saveWithAuth';
import { ManyToOne } from '../../components/ManyToOne';
interface Props extends NativeStackScreenProps<RootStackParams, 'CustomerFormScreen'>{};
export const CustomerFormScreen = ({route , navigation }: Props) => {
interface Props extends NativeStackScreenProps<RootStackParams, 'CustomerFormScreen'> { };
export const CustomerFormScreen = ({ route, navigation }: Props) => {
const { control, handleSubmit, getValues, setValue, formState: { errors } } = useForm({
const { control, handleSubmit, setValue, formState: { errors } } = useForm({
defaultValues: {
id: 0,
nombre: '',
telefono: '',
compania: { id: 0 }
}
});
let id:string = "0";
if (route.params?.id!= undefined) {
let id: string = "0";
if (route.params?.id != undefined) {
id = String(route.params.id);
}
const getInitData = async () => {
if (!id || id=="0")
return;
if (!id || id == "0")
return;
const { data, error } = await useFetchWithAuth("cliente/" + id);
if (!error) {
if (data.id!=0){
setValue("id", data['id'])
setValue("nombre", data['nombre'])
setValue("telefono", data['telefono'])
}
if (data.id != 0) {
setValue("id", data['id'])
setValue("nombre", data['nombre'])
setValue("telefono", data['telefono'])
setValue("compania", data['compania'])
}
} else {
console.log(error)
console.log(error)
}
}
}
useEffect(() => {
getInitData();
}, [])
useEffect(() => {
getInitData();
}, [])
const onSubmit = async (entity: any) => {
try {
let endpoint = "cliente";
//entity['compania'] = {id: entity['compania']}
console.log(entity)
const { data, error } = await saveWithAuth(endpoint, id, entity);
if (error) {
console.log(error);
} else {
navigation.navigate("CustomerListScreen")
}
} catch (e) {
console.log("Post error:");
console.table(e);
const onSubmit = async (entity: any) => {
try {
let endpoint = "cliente";
entity['compania'] = { id: entity['compania'].id }
const { data, error } = await saveWithAuth(endpoint, id, entity);
if (error) {
console.log(error);
} else {
navigation.navigate("CustomerListScreen")
}
} catch (e) {
console.log("Post error:");
console.table(e);
}
}
console.debug(id)
return (
<>
<Background >
<Card>
<Text className='text-xl text-center my-4'>Registro de clientes</Text>
<Input name="nombre" label='Nombre' control={control} />
<Input name="telefono" label='Telefono' control={control} />
<Button
title='Guardar'
onPress={handleSubmit(onSubmit)}
/>
</Card>
</Background>
</>
)
return (
<>
<Background >
<Card>
<Text className='text-xl text-center my-4'>Registro de clientes</Text>
<Input name="nombre" label='Nombre' control={control} />
<Input name="telefono" label='Telefono' control={control} />
<ManyToOne entity='compania' columname='compania' columnvalue="nombre" control={control} />
<Button
title='Guardar'
onPress={handleSubmit(onSubmit)}
/>
</Card>
</Background>
</>
)
}

@ -1,78 +1,63 @@
import { FC, useEffect, useState } from 'react'
import { useEffect, useState } from 'react'
import { FlatList, RefreshControl, Text, View } from 'react-native'
import { Card } from '../../components/Card'
import { Button } from '../../components/Button'
import { useNavigation } from '@react-navigation/native';
import { Card } from '../../components/Card'
import { CardList } from '../../components/cardList/CardList'
import { Button } from '../../components/Button'
import { useFetchWithAuth } from '../../hooks/useFetchWithAuth'
interface Props {
}
export const CustomerListScreen:FC <Props> = () => {
export const CustomerListScreen = () => {
const navigation = useNavigation();
const [refreshing, setRefreshing] = useState(false);
const endpoints = "cliente";
let defaultData:[] = [];
const [entities, setEntities] = useState(defaultData);
let defaultData: [] = [];
console.log("Inicio list customer")
const getInitData = async () => {
const { data, error } = await useFetchWithAuth(endpoints);
const [entities, setEntities] = useState(defaultData);
if (!error) {
setEntities(data);
} else {
console.log(error)
}
const getInitData = async () => {
const { data, error } = await useFetchWithAuth(endpoints);
if (!error) {
setEntities(data);
} else {
console.log(error)
}
}
useEffect(() => {
console.log("Disparo useEffect list customer")
getInitData();
}, [refreshing])
useEffect(() => {
getInitData();
}, [refreshing])
const onRefresh = () => {
setRefreshing(true);
setTimeout(() => {
setRefreshing(false);
}, 1000);
};
const onRefresh = () => {
setRefreshing(true);
setTimeout(() => {
setRefreshing(false);
}, 1000);
};
return (
return (
<View className='bg-sky-100'>
<Button
title=' + '
additionalStyle='z-10 absolute bottom-2 right-0'
onPress={()=>navigation.navigate("CustomerFormScreen" as never)} />
<FlatList
<Button
title=' + '
additionalStyle='z-10 absolute bottom-2 right-0'
onPress={() => navigation.navigate("CustomerFormScreen" as never)} />
<FlatList
refreshControl={
<RefreshControl
refreshing={refreshing}
onRefresh={onRefresh}
/>
}
data={[""]}
renderItem={({item}) =>
data={[""]}
renderItem={({ item }) =>
<View id={item} className='flex-1 items-center'>
<Card>
<Text className='text-xl text-center my-4'>Listado de clientes</Text>
<CardList screenName="CustomerFormScreen" entities={entities} />
<CardList screenName="CustomerFormScreen" columnDisplay="nombre" entities={entities} />
</Card>
</View>
}
keyExtractor={item => item}
}
keyExtractor={item => item}
/>
</View>
)
)
}

@ -1,4 +1,4 @@
import { useContext } from 'react'
import { useContext } from 'react'
import { createNativeStackNavigator } from '@react-navigation/native-stack';
import { AuthContext } from '../login/AuthContext';
import { CustomerFormScreen } from './CustomerFormScreen';
@ -6,27 +6,25 @@ import { CustomerListScreen } from './CustomerListScreen';
export type RootStackParams = {
CustomerListScreen: undefined,
CustomerFormScreen: {id:number}
CustomerFormScreen: { id: number }
}
const Stack = createNativeStackNavigator<RootStackParams>();
export const CustomerStack = () => {
const {isAuthenticated} = useContext(AuthContext)
return (
<Stack.Navigator
screenOptions={{
headerShown: true,
}}
>
{isAuthenticated&&(
<>
<Stack.Screen name="CustomerListScreen" component={CustomerListScreen} />
<Stack.Screen name="CustomerFormScreen" component={CustomerFormScreen} />
</>
)}
</Stack.Navigator>
)
const { isAuthenticated } = useContext(AuthContext)
return (
<Stack.Navigator
screenOptions={{
headerShown: true,
}}
>
{isAuthenticated && (
<>
<Stack.Screen name="CustomerListScreen" component={CustomerListScreen} />
<Stack.Screen name="CustomerFormScreen" component={CustomerFormScreen} />
</>
)}
</Stack.Navigator>
)
}

@ -0,0 +1,100 @@
import { useEffect } from 'react'
import { Text,Image } from 'react-native'
import { Background } from '../../components/Background'
import { Button } from '../../components/Button';
import { Card } from '../../components/Card';
import { Input } from '../../components/Input';
import { useForm } from 'react-hook-form';
import { NativeStackScreenProps } from '@react-navigation/native-stack';
import { RootStackParams } from './ProductStack';
import { useFetchWithAuth } from '../../hooks/useFetchWithAuth';
import { saveWithAuth } from '../../hooks/saveWithAuth';
import { InputNumber } from '../../components/InputNumber';
import { InputDate } from '../../components/InputDate';
import { Avatar, Layout } from '@ui-kitten/components';
interface Props extends NativeStackScreenProps<RootStackParams, 'ProductFormScreen'> { };
export const ProductFormScreen = ({ route, navigation }: Props) => {
const { control, handleSubmit, setValue, formState: { errors } } = useForm({
defaultValues: {
id: 0,
nombre: '',
codigo: '',
precio: 0,
creado: new Date()
}
});
let id: string = "0";
if (route.params?.id != undefined) {
id = String(route.params.id);
}
const getInitData = async () => {
if (!id || id == "0")
return;
const { data, error } = await useFetchWithAuth("producto/" + id);
if (!error) {
if (data.id != 0) {
setValue("id", data['id'])
setValue("nombre", data['nombre'])
setValue("codigo", data['codigo'])
setValue("precio", data['precio'])
setValue("creado", data['creado'])
}
} else {
console.log(error)
}
}
useEffect(() => {
getInitData();
}, [])
const onSubmit = async (entity: any) => {
try {
let endpoint = "producto";
//entity['creado'] = entity['creado']
const { data, error } = await saveWithAuth(endpoint, id, entity);
if (error) {
console.log(error);
} else {
navigation.navigate("ProductListScreen")
}
} catch (e) {
console.log("Post error:");
console.log(e);
}
}
return (
<>
<Background >
<Card>
<Text className='text-xl text-center my-4'>Registro de Productos</Text>
<Image
source={{uri:'https://images.philips.com/is/image/PhilipsConsumer/271V8_69-IMS-en_HK?$jpglarge$&wid=1250'}}
style={{
width:100,
height:100
}}
/>
<Input name="codigo" label='Código' control={control} />
<Input name="nombre" label='Nombre' control={control} />
<InputNumber name="precio" label='Precio' control={control} />
<InputDate name="creado" label='creado' control={control} />
<Button
title='Guardar'
onPress={handleSubmit(onSubmit)}
/>
</Card>
</Background>
</>
)
}

@ -0,0 +1,65 @@
import { useEffect, useState } from 'react'
import { FlatList, RefreshControl, Text, View } from 'react-native'
import { useNavigation } from '@react-navigation/native';
import { Card } from '../../components/Card'
import { CardList } from '../../components/cardList/CardList'
import { Button } from '../../components/Button'
import { useFetchWithAuth } from '../../hooks/useFetchWithAuth'
import { ProductCardList } from '../../components/cardList/ProductCardList';
export const ProductListScreen = () => {
const navigation = useNavigation();
const [refreshing, setRefreshing] = useState(false);
const endpoints = "producto";
let defaultData: [] = [];
const [entities, setEntities] = useState(defaultData);
const getInitData = async () => {
const { data, error } = await useFetchWithAuth(endpoints);
if (!error) {
setEntities(data);
} else {
console.log(error)
}
}
useEffect(() => {
getInitData();
}, [refreshing])
const onRefresh = () => {
setRefreshing(true);
setTimeout(() => {
setRefreshing(false);
}, 1000);
};
return (
<View className='bg-sky-100'>
<Button
title=' + '
additionalStyle='z-10 absolute bottom-2 right-0'
onPress={() => navigation.navigate("ProductFormScreen" as never)} />
<FlatList
refreshControl={
<RefreshControl
refreshing={refreshing}
onRefresh={onRefresh}
/>
}
data={[""]}
renderItem={({ item }) =>
<View id={item} className='flex-1 items-center'>
<Card>
<Text className='text-xl text-center my-4'>Listado de Produtos</Text>
<ProductCardList screenName="ProductFormScreen" columnDisplay="nombre" entities={entities} />
</Card>
</View>
}
keyExtractor={item => item}
/>
</View>
)
}

@ -1,13 +0,0 @@
import { FC } from 'react'
import { Text } from 'react-native'
interface Props {
}
export const ProductScreen:FC <Props> = () => {
return (
<>
<Text>Producto</Text>
</>
)
}

@ -0,0 +1,30 @@
import { useContext } from 'react'
import { createNativeStackNavigator } from '@react-navigation/native-stack';
import { AuthContext } from '../login/AuthContext';
import { ProductFormScreen } from './ProductFormScreen';
import { ProductListScreen } from './ProductListScreen';
export type RootStackParams = {
ProductListScreen: undefined,
ProductFormScreen: { id: number }
}
const Stack = createNativeStackNavigator<RootStackParams>();
export const ProductStack = () => {
const { isAuthenticated } = useContext(AuthContext)
return (
<Stack.Navigator
screenOptions={{
headerShown: true,
}}
>
{isAuthenticated && (
<>
<Stack.Screen name="ProductListScreen" component={ProductListScreen} />
<Stack.Screen name="ProductFormScreen" component={ProductFormScreen} />
</>
)}
</Stack.Navigator>
)
}

@ -0,0 +1,75 @@
import { useEffect, useState } from 'react'
import { FlatList, RefreshControl, Text, View } from 'react-native'
import { useNavigation } from '@react-navigation/native';
import { Card } from '../../components/Card'
import { CardList } from '../../components/cardList/CardList'
import { Button } from '../../components/Button'
import { useFetchWithAuth } from '../../hooks/useFetchWithAuth'
import { ProductCardList } from '../../components/cardList/ProductCardList';
export const ProductList = () => {
const navigation = useNavigation();
const [refreshing, setRefreshing] = useState(false);
const endpoints = "producto";
let defaultData: [] = [];
const [entities, setEntities] = useState(defaultData);
const getInitData = async () => {
const { data, error } = await useFetchWithAuth(endpoints);
if (!error) {
setEntities(data);
} else {
console.log(error)
}
}
useEffect(() => {
getInitData();
}, [refreshing])
const onRefresh = () => {
setRefreshing(true);
setTimeout(() => {
setRefreshing(false);
}, 1000);
};
return (
<View className='bg-sky-100'>
<Button
title=' + '
additionalStyle='z-10 absolute bottom-2 right-0'
onPress={() => {
// Pass and merge params back to home screen
navigation.navigate(
{
name: 'SalesOrderFormScreen',
params: { productId: 1 },
merge: true,
} as never
);
}}
/>
<FlatList
refreshControl={
<RefreshControl
refreshing={refreshing}
onRefresh={onRefresh}
/>
}
data={[""]}
renderItem={({ item }) =>
<View id={item} className='flex-1 items-center'>
<Card>
<Text className='text-xl text-center my-4'>Listado de Produtos</Text>
<ProductCardList screenName="ProductFormScreen" columnDisplay="nombre" entities={entities} />
</Card>
</View>
}
keyExtractor={item => item}
/>
</View>
)
}

@ -0,0 +1,93 @@
import { useEffect } from 'react'
import { Text } from 'react-native'
import { Background } from '../../components/Background'
import { Button } from '../../components/Button';
import { Card } from '../../components/Card';
import { Input } from '../../components/Input';
import { useForm } from 'react-hook-form';
import { NativeStackScreenProps } from '@react-navigation/native-stack';
import { useFetchWithAuth } from '../../hooks/useFetchWithAuth';
import { saveWithAuth } from '../../hooks/saveWithAuth';
import { ManyToOne } from '../../components/ManyToOne';
import { RootStackParams } from './SalesOrderStack';
interface Props extends NativeStackScreenProps<RootStackParams, 'SalesOrderFormScreen'> { };
export const SalesOrderFormScreen = ({ route, navigation }: Props) => {
const { control, handleSubmit, setValue, formState: { errors } } = useForm({
defaultValues: {
id: 0,
numero: '',
cliente: { id: 0 },
detalle: []
}
});
let id: string = "0";
if (route.params?.id != undefined) {
id = String(route.params.id);
}
const getInitData = async () => {
if (!id || id == "0")
return;
const { data, error } = await useFetchWithAuth("pedido/" + id);
if (!error) {
if (data.id != 0) {
setValue("id", data['id'])
setValue("numero", data['numero'])
setValue("cliente", data['cliente'])
setValue("detalle", data['detalle'])
}
} else {
console.log(error)
}
}
useEffect(() => {
getInitData();
}, [])
const onSubmit = async (entity: any) => {
try {
let endpoint = "pedido";
entity['cliente'] = { id: entity['cliente'].id }
console.log("Entidad:")
console.log(entity)
const { data, error } = await saveWithAuth(endpoint, id, entity);
if (error) {
console.log(error);
} else {
navigation.navigate("SalesOrderListScreen")
}
} catch (e) {
console.log("Post error:");
console.table(e);
}
}
return (
<>
<Background >
<Card>
<Text className='text-xl text-center my-4'>Registro de Pedido</Text>
<Input name="numero" label='Número' control={control} />
<ManyToOne entity='cliente' columname='cliente' columnvalue="nombre" control={control} />
<Button
title='Agrega produtos'
additionalStyle='mb-4'
onPress={() => navigation.navigate("ProductListScreen" as never)} />
<Button
title='Guardar'
onPress={handleSubmit(onSubmit)}
/>
</Card>
</Background>
</>
)
}

@ -0,0 +1,63 @@
import { useEffect, useState } from 'react'
import { FlatList, RefreshControl, Text, View } from 'react-native'
import { useNavigation } from '@react-navigation/native';
import { Card } from '../../components/Card'
import { CardList } from '../../components/cardList/CardList'
import { Button } from '../../components/Button'
import { useFetchWithAuth } from '../../hooks/useFetchWithAuth'
export const SalesOrderListScreen = () => {
const navigation = useNavigation();
const [refreshing, setRefreshing] = useState(false);
const endpoints = "pedido";
let defaultData: [] = [];
const [entities, setEntities] = useState(defaultData);
const getInitData = async () => {
const { data, error } = await useFetchWithAuth(endpoints);
if (!error) {
setEntities(data);
} else {
console.log(error)
}
}
useEffect(() => {
getInitData();
}, [refreshing])
const onRefresh = () => {
setRefreshing(true);
setTimeout(() => {
setRefreshing(false);
}, 1000);
};
return (
<View className='bg-sky-100'>
<Button
title=' + '
additionalStyle='z-10 absolute bottom-2 right-0'
onPress={() => navigation.navigate("SalesOrderFormScreen" as never)} />
<FlatList
refreshControl={
<RefreshControl
refreshing={refreshing}
onRefresh={onRefresh}
/>
}
data={[""]}
renderItem={({ item }) =>
<View id={item} className='flex-1 items-center'>
<Card>
<Text className='text-xl text-center my-4'>Listado de pedidos</Text>
<CardList screenName="SalesOrderFormScreen" columnDisplay="numero" entities={entities} />
</Card>
</View>
}
keyExtractor={item => item}
/>
</View>
)
}

@ -1,34 +0,0 @@
import { FC, useContext } from 'react'
import { Text } from 'react-native'
import { Button } from '../../components/Button'
import { StackScreenProps } from '@react-navigation/stack';
import { View } from 'react-native';
import { AuthContext } from '../login/AuthContext';
import { Background } from '../../components/Background';
import { NavBar } from '../../components/navbar/NavBar';
interface Props extends StackScreenProps<any, any> {
}
export const SalesOrderScreen:FC <Props> = ({navigation}) => {
const {isAuthenticated, logOut} = useContext(AuthContext);
const exit = () => {
logOut();
navigation.navigate("CustomerScreen");
}
return (
<>
<Background >
<Text>Pedidos</Text>
<Button title='Clientes' onClick={()=>navigation.navigate("CustomerScreen")}/>
<Button title='LogOut' onClick={()=>exit()} />
</Background>
</>
)
}

@ -0,0 +1,33 @@
import { useContext } from 'react'
import { createNativeStackNavigator } from '@react-navigation/native-stack';
import { AuthContext } from '../login/AuthContext';
import { SalesOrderFormScreen } from './SalesOrderFormScreen';
import { SalesOrderListScreen } from './SalesOrderListScreen';
import { ProductList } from './ProductList';
export type RootStackParams = {
SalesOrderListScreen: undefined,
SalesOrderFormScreen: { id: number },
ProductList: undefined
}
const Stack = createNativeStackNavigator<RootStackParams>();
export const SalesOrderStack = () => {
const { isAuthenticated } = useContext(AuthContext)
return (
<Stack.Navigator
screenOptions={{
headerShown: true,
}}
>
{isAuthenticated && (
<>
<Stack.Screen name="SalesOrderListScreen" component={SalesOrderListScreen} />
<Stack.Screen name="SalesOrderFormScreen" component={SalesOrderFormScreen} />
<Stack.Screen name="ProductList" component={ProductList} />
</>
)}
</Stack.Navigator>
)
}
Loading…
Cancel
Save