diff --git a/hasura/migrations/1603130811501_alter_table_public_jobs_add_column_close_date/down.yaml b/hasura/migrations/1603130811501_alter_table_public_jobs_add_column_close_date/down.yaml new file mode 100644 index 0000000..14d5427 --- /dev/null +++ b/hasura/migrations/1603130811501_alter_table_public_jobs_add_column_close_date/down.yaml @@ -0,0 +1,5 @@ +- args: + cascade: false + read_only: false + sql: ALTER TABLE "public"."jobs" DROP COLUMN "close_date"; + type: run_sql diff --git a/hasura/migrations/1603130811501_alter_table_public_jobs_add_column_close_date/up.yaml b/hasura/migrations/1603130811501_alter_table_public_jobs_add_column_close_date/up.yaml new file mode 100644 index 0000000..733e08a --- /dev/null +++ b/hasura/migrations/1603130811501_alter_table_public_jobs_add_column_close_date/up.yaml @@ -0,0 +1,5 @@ +- args: + cascade: false + read_only: false + sql: ALTER TABLE "public"."jobs" ADD COLUMN "close_date" date NULL; + type: run_sql diff --git a/hasura/migrations/1603130822114_update_permission_user_public_table_jobs/down.yaml b/hasura/migrations/1603130822114_update_permission_user_public_table_jobs/down.yaml new file mode 100644 index 0000000..7be4c70 --- /dev/null +++ b/hasura/migrations/1603130822114_update_permission_user_public_table_jobs/down.yaml @@ -0,0 +1,41 @@ +- args: + role: user + table: + name: jobs + schema: public + type: drop_insert_permission +- args: + permission: + backend_only: false + check: + bodyshop: + associations: + user: + authid: + _eq: X-Hasura-User-Id + columns: + - loss_date + - bodyshopid + - clm_no + - clm_total + - created_at + - group + - id + - ins_co_nm + - ownr_fn + - ownr_ln + - ro_number + - updated_at + - v_age + - v_makedesc + - v_mileage + - v_model + - v_model_yr + - v_type + - v_vin + set: {} + role: user + table: + name: jobs + schema: public + type: create_insert_permission diff --git a/hasura/migrations/1603130822114_update_permission_user_public_table_jobs/up.yaml b/hasura/migrations/1603130822114_update_permission_user_public_table_jobs/up.yaml new file mode 100644 index 0000000..d88cdc2 --- /dev/null +++ b/hasura/migrations/1603130822114_update_permission_user_public_table_jobs/up.yaml @@ -0,0 +1,42 @@ +- args: + role: user + table: + name: jobs + schema: public + type: drop_insert_permission +- args: + permission: + backend_only: false + check: + bodyshop: + associations: + user: + authid: + _eq: X-Hasura-User-Id + columns: + - bodyshopid + - clm_no + - clm_total + - close_date + - created_at + - group + - id + - ins_co_nm + - loss_date + - ownr_fn + - ownr_ln + - ro_number + - updated_at + - v_age + - v_makedesc + - v_mileage + - v_model + - v_model_yr + - v_type + - v_vin + set: {} + role: user + table: + name: jobs + schema: public + type: create_insert_permission diff --git a/hasura/migrations/1603130828389_update_permission_user_public_table_jobs/down.yaml b/hasura/migrations/1603130828389_update_permission_user_public_table_jobs/down.yaml new file mode 100644 index 0000000..048a25d --- /dev/null +++ b/hasura/migrations/1603130828389_update_permission_user_public_table_jobs/down.yaml @@ -0,0 +1,41 @@ +- args: + role: user + table: + name: jobs + schema: public + type: drop_select_permission +- args: + permission: + allow_aggregations: true + columns: + - loss_date + - bodyshopid + - clm_no + - clm_total + - created_at + - group + - id + - ins_co_nm + - ownr_fn + - ownr_ln + - ro_number + - updated_at + - v_age + - v_makedesc + - v_mileage + - v_model + - v_model_yr + - v_type + - v_vin + computed_fields: [] + filter: + bodyshop: + associations: + user: + authid: + _eq: X-Hasura-User-Id + role: user + table: + name: jobs + schema: public + type: create_select_permission diff --git a/hasura/migrations/1603130828389_update_permission_user_public_table_jobs/up.yaml b/hasura/migrations/1603130828389_update_permission_user_public_table_jobs/up.yaml new file mode 100644 index 0000000..aaed297 --- /dev/null +++ b/hasura/migrations/1603130828389_update_permission_user_public_table_jobs/up.yaml @@ -0,0 +1,42 @@ +- args: + role: user + table: + name: jobs + schema: public + type: drop_select_permission +- args: + permission: + allow_aggregations: true + columns: + - bodyshopid + - clm_no + - clm_total + - close_date + - created_at + - group + - id + - ins_co_nm + - loss_date + - ownr_fn + - ownr_ln + - ro_number + - updated_at + - v_age + - v_makedesc + - v_mileage + - v_model + - v_model_yr + - v_type + - v_vin + computed_fields: [] + filter: + bodyshop: + associations: + user: + authid: + _eq: X-Hasura-User-Id + role: user + table: + name: jobs + schema: public + type: create_select_permission diff --git a/hasura/migrations/1603130833789_update_permission_user_public_table_jobs/down.yaml b/hasura/migrations/1603130833789_update_permission_user_public_table_jobs/down.yaml new file mode 100644 index 0000000..6c7005c --- /dev/null +++ b/hasura/migrations/1603130833789_update_permission_user_public_table_jobs/down.yaml @@ -0,0 +1,40 @@ +- args: + role: user + table: + name: jobs + schema: public + type: drop_update_permission +- args: + permission: + columns: + - loss_date + - bodyshopid + - clm_no + - clm_total + - created_at + - group + - id + - ins_co_nm + - ownr_fn + - ownr_ln + - ro_number + - updated_at + - v_age + - v_makedesc + - v_mileage + - v_model + - v_model_yr + - v_type + - v_vin + filter: + bodyshop: + associations: + user: + authid: + _eq: X-Hasura-User-Id + set: {} + role: user + table: + name: jobs + schema: public + type: create_update_permission diff --git a/hasura/migrations/1603130833789_update_permission_user_public_table_jobs/up.yaml b/hasura/migrations/1603130833789_update_permission_user_public_table_jobs/up.yaml new file mode 100644 index 0000000..619edd7 --- /dev/null +++ b/hasura/migrations/1603130833789_update_permission_user_public_table_jobs/up.yaml @@ -0,0 +1,41 @@ +- args: + role: user + table: + name: jobs + schema: public + type: drop_update_permission +- args: + permission: + columns: + - bodyshopid + - clm_no + - clm_total + - close_date + - created_at + - group + - id + - ins_co_nm + - loss_date + - ownr_fn + - ownr_ln + - ro_number + - updated_at + - v_age + - v_makedesc + - v_mileage + - v_model + - v_model_yr + - v_type + - v_vin + filter: + bodyshop: + associations: + user: + authid: + _eq: X-Hasura-User-Id + set: {} + role: user + table: + name: jobs + schema: public + type: create_update_permission diff --git a/hasura/migrations/metadata.yaml b/hasura/migrations/metadata.yaml index 3ab3d59..3bf57a9 100644 --- a/hasura/migrations/metadata.yaml +++ b/hasura/migrations/metadata.yaml @@ -191,14 +191,15 @@ tables: authid: _eq: X-Hasura-User-Id columns: - - loss_date - bodyshopid - clm_no - clm_total + - close_date - created_at - group - id - ins_co_nm + - loss_date - ownr_fn - ownr_ln - ro_number @@ -215,14 +216,15 @@ tables: - role: user permission: columns: - - loss_date - bodyshopid - clm_no - clm_total + - close_date - created_at - group - id - ins_co_nm + - loss_date - ownr_fn - ownr_ln - ro_number @@ -245,14 +247,15 @@ tables: - role: user permission: columns: - - loss_date - bodyshopid - clm_no - clm_total + - close_date - created_at - group - id - ins_co_nm + - loss_date - ownr_fn - ownr_ln - ro_number diff --git a/package-lock.json b/package-lock.json index a264126..a602e33 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1472,9 +1472,9 @@ "integrity": "sha512-L/ZnJRAq7F++utfuoTKX4CLBG5YR7tFO3PLzG1/oXXKEezJ0kRL3CMRoueBEmTCzVb/6SIs2Qlaw++uDgi5Xyg==" }, "@firebase/auth": { - "version": "0.14.9", - "resolved": "https://registry.npmjs.org/@firebase/auth/-/auth-0.14.9.tgz", - "integrity": "sha512-PxYa2r5qUEdheXTvqROFrMstK8W4uPiP7NVfp+2Bec+AjY5PxZapCx/YFDLkU0D7YBI82H74PtZrzdJZw7TJ4w==", + "version": "0.15.0", + "resolved": "https://registry.npmjs.org/@firebase/auth/-/auth-0.15.0.tgz", + "integrity": "sha512-IFuzhxS+HtOQl7+SZ/Mhaghy/zTU7CENsJFWbC16tv2wfLZbayKF5jYGdAU3VFLehgC8KjlcIWd10akc3XivfQ==", "requires": { "@firebase/auth-types": "0.10.1" } @@ -1531,15 +1531,15 @@ } }, "@firebase/firestore": { - "version": "1.17.3", - "resolved": "https://registry.npmjs.org/@firebase/firestore/-/firestore-1.17.3.tgz", - "integrity": "sha512-wRdrgeSBJ50eo63x8GnO8NgVNe3vBw2xhKhyMXl0JTWQIbxnlMjAHcz7b85VvsqPLI7U70PgWQnfQtJOXRCNUA==", + "version": "1.18.0", + "resolved": "https://registry.npmjs.org/@firebase/firestore/-/firestore-1.18.0.tgz", + "integrity": "sha512-maMq4ltkrwjDRusR2nt0qS4wldHQMp+0IDSfXIjC+SNmjnWY/t/+Skn9U3Po+dB38xpz3i7nsKbs+8utpDnPSw==", "requires": { "@firebase/component": "0.1.19", - "@firebase/firestore-types": "1.13.0", + "@firebase/firestore-types": "1.14.0", "@firebase/logger": "0.2.6", "@firebase/util": "0.3.2", - "@firebase/webchannel-wrapper": "0.3.0", + "@firebase/webchannel-wrapper": "0.4.0", "@grpc/grpc-js": "^1.0.0", "@grpc/proto-loader": "^0.5.0", "node-fetch": "2.6.1", @@ -1547,9 +1547,9 @@ } }, "@firebase/firestore-types": { - "version": "1.13.0", - "resolved": "https://registry.npmjs.org/@firebase/firestore-types/-/firestore-types-1.13.0.tgz", - "integrity": "sha512-QF5CAuYOHE6Zbsn1uEg6wkl836iP+i6C0C/Zs3kF60eebxZvTWp8JSZk19Ar+jj4w+ye8/7H5olu5CqDNjWpEA==" + "version": "1.14.0", + "resolved": "https://registry.npmjs.org/@firebase/firestore-types/-/firestore-types-1.14.0.tgz", + "integrity": "sha512-WF8IBwHzZDhwyOgQnmB0pheVrLNP78A8PGxk1nxb/Nrgh1amo4/zYvFMGgSsTeaQK37xMYS/g7eS948te/dJxw==" }, "@firebase/functions": { "version": "0.5.1", @@ -1686,9 +1686,9 @@ } }, "@firebase/webchannel-wrapper": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/@firebase/webchannel-wrapper/-/webchannel-wrapper-0.3.0.tgz", - "integrity": "sha512-VniCGPIgSGNEgOkh5phb3iKmSGIzcwrccy3IomMFRWPCMiCk2y98UQNJEoDs1yIHtZMstVjYWKYxnunIGzC5UQ==" + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/@firebase/webchannel-wrapper/-/webchannel-wrapper-0.4.0.tgz", + "integrity": "sha512-8cUA/mg0S+BxIZ72TdZRsXKBP5n5uRcE3k29TZhZw6oIiHBt9JA7CTb/4pE1uKtE/q5NeTY2tBDcagoZ+1zjXQ==" }, "@graphql-typed-document-node/core": { "version": "3.1.0", @@ -1719,9 +1719,9 @@ } }, "@types/node": { - "version": "12.12.67", - "resolved": "https://registry.npmjs.org/@types/node/-/node-12.12.67.tgz", - "integrity": "sha512-R48tgL2izApf+9rYNH+3RBMbRpPeW3N8f0I9HMhggeq4UXwBDqumJ14SDs4ctTMhG11pIOduZ4z3QWGOiMc9Vg==" + "version": "12.12.68", + "resolved": "https://registry.npmjs.org/@types/node/-/node-12.12.68.tgz", + "integrity": "sha512-3RW2s24ewB7F9dAHvgb9FRvNHn6nO9IK6Eaknbz7HTOe2a5GVne5XbUh5+YA+kcCn67glyHhClUUdFP73LWrgQ==" }, "camelcase": { "version": "5.3.1", @@ -1738,54 +1738,11 @@ "wrap-ansi": "^6.2.0" } }, - "find-up": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", - "requires": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - } - }, "is-fullwidth-code-point": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==" }, - "locate-path": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", - "requires": { - "p-locate": "^4.1.0" - } - }, - "p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", - "requires": { - "p-try": "^2.0.0" - } - }, - "p-locate": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", - "requires": { - "p-limit": "^2.2.0" - } - }, - "p-try": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", - "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==" - }, - "path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==" - }, "semver": { "version": "6.3.0", "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", @@ -3269,9 +3226,9 @@ } }, "antd": { - "version": "4.7.0", - "resolved": "https://registry.npmjs.org/antd/-/antd-4.7.0.tgz", - "integrity": "sha512-qXXgclUmx6InkNce5BsIie9GR/39FGsVikwTMObofnVVALv+uOLH4D14reX7K50QldDXHZ7jIPU1JTkcNgtBoA==", + "version": "4.7.2", + "resolved": "https://registry.npmjs.org/antd/-/antd-4.7.2.tgz", + "integrity": "sha512-baMyvvNRB0rqhUxi4cSaH4AG9Cd2W7TjAJnOrVTow8y5E45g3JU31+dAVUHWvtht6LTiWh4BLiKfCdZrSYBeEA==", "requires": { "@ant-design/colors": "^4.0.5", "@ant-design/css-animation": "^1.7.2", @@ -3296,7 +3253,7 @@ "rc-image": "~3.2.1", "rc-input-number": "~6.1.0", "rc-mentions": "~1.5.0", - "rc-menu": "~8.7.1", + "rc-menu": "~8.8.2", "rc-motion": "^2.2.0", "rc-notification": "~4.5.2", "rc-pagination": "~3.1.0", @@ -3309,7 +3266,7 @@ "rc-steps": "~4.1.0", "rc-switch": "~3.2.0", "rc-table": "~7.10.0", - "rc-tabs": "~11.6.0", + "rc-tabs": "~11.7.0", "rc-textarea": "~0.3.0", "rc-tooltip": "~5.0.0", "rc-tree": "~3.10.0", @@ -8485,17 +8442,62 @@ } } }, + "find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "requires": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + }, + "dependencies": { + "locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "requires": { + "p-locate": "^4.1.0" + } + }, + "p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "requires": { + "p-try": "^2.0.0" + } + }, + "p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "requires": { + "p-limit": "^2.2.0" + } + }, + "p-try": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==" + }, + "path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==" + } + } + }, "firebase": { - "version": "7.23.0", - "resolved": "https://registry.npmjs.org/firebase/-/firebase-7.23.0.tgz", - "integrity": "sha512-0b1zi0H8jT4KqyPabldzPhyKTeptw5E5a7KkjWW3MBMVV/LjbC6/NKhRR8sGQNbsbS2LnTvyEENWbqkZP2ZXtw==", + "version": "7.24.0", + "resolved": "https://registry.npmjs.org/firebase/-/firebase-7.24.0.tgz", + "integrity": "sha512-j6jIyGFFBlwWAmrlUg9HyQ/x+YpsPkc/TTkbTyeLwwAJrpAmmEHNPT6O9xtAnMV4g7d3RqLL/u9//aZlbY4rQA==", "requires": { "@firebase/analytics": "0.6.0", "@firebase/app": "0.6.11", "@firebase/app-types": "0.6.1", - "@firebase/auth": "0.14.9", + "@firebase/auth": "0.15.0", "@firebase/database": "0.6.13", - "@firebase/firestore": "1.17.3", + "@firebase/firestore": "1.18.0", "@firebase/functions": "0.5.1", "@firebase/installations": "0.4.17", "@firebase/messaging": "0.7.1", @@ -8994,16 +8996,16 @@ } }, "google-auth-library": { - "version": "6.1.1", - "resolved": "https://registry.npmjs.org/google-auth-library/-/google-auth-library-6.1.1.tgz", - "integrity": "sha512-0WfExOx3FrLYnY88RICQxvpaNzdwjz44OsHqHkIoAJfjY6Jck6CZRl1ASWadk+wbJ0LhkQ8rNY4zZebKml4Ghg==", + "version": "6.1.2", + "resolved": "https://registry.npmjs.org/google-auth-library/-/google-auth-library-6.1.2.tgz", + "integrity": "sha512-X9EUX8R+kIpsf55KdSPhFWF0RNyBGuBc1zeYc/5Sjuk65eIYqq91rINJVBD22pp+w/PuM2fasHiA6H2xYjxTIQ==", "requires": { "arrify": "^2.0.0", "base64-js": "^1.3.0", "ecdsa-sig-formatter": "^1.0.11", "fast-text-encoding": "^1.0.0", "gaxios": "^3.0.0", - "gcp-metadata": "^4.1.0", + "gcp-metadata": "^4.2.0", "gtoken": "^5.0.4", "jws": "^4.0.0", "lru-cache": "^6.0.0" @@ -15271,9 +15273,9 @@ }, "dependencies": { "@types/node": { - "version": "13.13.25", - "resolved": "https://registry.npmjs.org/@types/node/-/node-13.13.25.tgz", - "integrity": "sha512-6ZMK4xRcF2XrPdKmPYQxZkdHKV18xKgUFVvhIgw2iwaaO6weleLPHLBGPZmLhjo+m1N+MZXRAoBEBCCVqgO2zQ==" + "version": "13.13.26", + "resolved": "https://registry.npmjs.org/@types/node/-/node-13.13.26.tgz", + "integrity": "sha512-+48LLqolaKj/WnIY1crfLseaGQMIDISBy3PTXVOZ7w/PBaRUv+H8t94++atzfoBAvorbUYz6Xq9vh1fHrg33ig==" } } }, @@ -15376,9 +15378,9 @@ "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==" }, "query-string": { - "version": "6.13.5", - "resolved": "https://registry.npmjs.org/query-string/-/query-string-6.13.5.tgz", - "integrity": "sha512-svk3xg9qHR39P3JlHuD7g3nRnyay5mHbrPctEBDUxUkHRifPHXJDhBUycdCC0NBjXoDf44Gb+IsOZL1Uwn8M/Q==", + "version": "6.13.6", + "resolved": "https://registry.npmjs.org/query-string/-/query-string-6.13.6.tgz", + "integrity": "sha512-/WWZ7d9na6s2wMEGdVCVgKWE9Rt7nYyNIf7k8xmHXcesPMlEzicWo3lbYwHyA4wBktI2KrXxxZeACLbE84hvSQ==", "requires": { "decode-uri-component": "^0.2.0", "split-on-first": "^1.0.0", @@ -15546,9 +15548,9 @@ } }, "rc-dialog": { - "version": "8.4.1", - "resolved": "https://registry.npmjs.org/rc-dialog/-/rc-dialog-8.4.1.tgz", - "integrity": "sha512-ezdI0RLqPZyOirWg5zQK0/hUeKNIi+kfxWFAMMpawsz7Ycbwr7fq/zEU3uQRbp6bFV+9BbGLr2b9HsK2Jg0xKg==", + "version": "8.4.2", + "resolved": "https://registry.npmjs.org/rc-dialog/-/rc-dialog-8.4.2.tgz", + "integrity": "sha512-8JZcJn2uJyC1pXCOsVQZH2z6norAF7NFVQ+2K0Ej83+YAZ0ZsxDDQuJGyBfnAi5M1pGJ4o+ETgSpj7VLXNwHDQ==", "requires": { "@babel/runtime": "^7.10.1", "classnames": "^2.2.6", @@ -15622,9 +15624,9 @@ } }, "rc-menu": { - "version": "8.7.1", - "resolved": "https://registry.npmjs.org/rc-menu/-/rc-menu-8.7.1.tgz", - "integrity": "sha512-CuuJ9oS1oPAfenqAMa3CZZE7RrPcPTHV3310cf6RO2uJgE9ztqasRFMEBwtruH16OexTr0igTCXySm+e2/TBQg==", + "version": "8.8.3", + "resolved": "https://registry.npmjs.org/rc-menu/-/rc-menu-8.8.3.tgz", + "integrity": "sha512-C9sT0SBXmUbVWRUseXASousacRVPnOm5aXdyJR569WIvZwbs2IncpGNmAcft1R5ZuFE3Y+SZZ5FYvtGtbCzkIQ==", "requires": { "@babel/runtime": "^7.10.1", "classnames": "2.x", @@ -15668,9 +15670,9 @@ } }, "rc-picker": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/rc-picker/-/rc-picker-2.3.0.tgz", - "integrity": "sha512-UArXxifQqkwEvICWDe456Fx2LnCSbh3wYuEdPXSKJR3mIEjlF5qabNSEaoCykFZB3GtvDSmlsIMjXB8FMfRJ/A==", + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/rc-picker/-/rc-picker-2.3.3.tgz", + "integrity": "sha512-ah4ucCnAs8ss7GgV7sF7MGgRlyfP4753z+OjnF4X7cIrntygklQqiFDBZYS02RX773vhJ+jc6AbyoR7hI4aGng==", "requires": { "@babel/runtime": "^7.10.1", "classnames": "^2.2.1", @@ -15678,7 +15680,7 @@ "dayjs": "^1.8.30", "moment": "^2.24.0", "rc-trigger": "^5.0.4", - "rc-util": "^5.0.1", + "rc-util": "^5.4.0", "shallowequal": "^1.1.0" } }, @@ -15771,9 +15773,9 @@ } }, "rc-tabs": { - "version": "11.6.2", - "resolved": "https://registry.npmjs.org/rc-tabs/-/rc-tabs-11.6.2.tgz", - "integrity": "sha512-7Z5Lg+nP/H4V7dIlewrOC0+aogRVH3ASjTy4VIletYOeStGPWYSfwBnUTBdcCXcUuWuyyKnNkYrUD0yaRqUCIA==", + "version": "11.7.0", + "resolved": "https://registry.npmjs.org/rc-tabs/-/rc-tabs-11.7.0.tgz", + "integrity": "sha512-nYwQcgML2drM0iau4aa6HI4qyyZSW0WpspCAtO5KGjXwHzUJcvv3qgLVuoQOWQaDDHXkI9Jj8U7Y/Hcrdyj1Kw==", "requires": { "@babel/runtime": "^7.11.2", "classnames": "2.x", @@ -15860,9 +15862,9 @@ } }, "rc-virtual-list": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/rc-virtual-list/-/rc-virtual-list-3.1.1.tgz", - "integrity": "sha512-hkDj4+xEdeYKe8sX7rft/rvh6uutiGHnqdn17//YhHdWoeDfP+TmGbzG2HEHrNdJIMEb/yNxu+KVEWd7JTJ9MA==", + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/rc-virtual-list/-/rc-virtual-list-3.2.0.tgz", + "integrity": "sha512-NZb+Z4tGkfrCNXprVUlLJxoRVIELwLmlY5nHwiV3pj4eA9Of8thpQwtT+AomwcZjKhC7R/EDtpk2ATMJXX5s3Q==", "requires": { "classnames": "^2.2.6", "rc-resize-observer": "^0.2.3", @@ -15870,9 +15872,9 @@ } }, "react": { - "version": "16.13.1", - "resolved": "https://registry.npmjs.org/react/-/react-16.13.1.tgz", - "integrity": "sha512-YMZQQq32xHLX0bz5Mnibv1/LHb3Sqzngu7xstSM+vrkE5Kzr9xE0yMByK5kMoTK30YVJE61WfbxIFFvfeDKT1w==", + "version": "16.14.0", + "resolved": "https://registry.npmjs.org/react/-/react-16.14.0.tgz", + "integrity": "sha512-0X2CImDkJGApiAlcf0ODKIneSwBPhqJawOa5wCtKbu7ZECrmS26NvtSILynQ66cgkT/RJ4LidJOc3bUESwmU8g==", "requires": { "loose-envify": "^1.1.0", "object-assign": "^4.1.1", @@ -16165,9 +16167,9 @@ } }, "react-dom": { - "version": "16.13.1", - "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-16.13.1.tgz", - "integrity": "sha512-81PIMmVLnCNLO/fFOQxdQkvEq/+Hfpv24XNJfpyZhTRfO0QcmQIF/PgCa1zCOj2w1hrn12MFLyaJ/G0+Mxtfag==", + "version": "16.14.0", + "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-16.14.0.tgz", + "integrity": "sha512-1gCeQXDLoIqMgqD3IO2Ah9bnf0w9kzhwN5q4FGnHZ67hBm9yePzB5JJAIQCc8x3pFnNlwFq4RidZggNAAkzWWw==", "requires": { "loose-envify": "^1.1.0", "object-assign": "^4.1.1", diff --git a/package.json b/package.json index 51924e9..c129288 100644 --- a/package.json +++ b/package.json @@ -9,7 +9,7 @@ "dependencies": { "@apollo/client": "^3.2.4", "@fingerprintjs/fingerprintjs": "^2.1.4", - "antd": "^4.7.0", + "antd": "^4.7.2", "apollo-link-logger": "^2.0.0", "chokidar": "^3.4.3", "dbffile": "^1.4.3", @@ -20,15 +20,15 @@ "electron-reload": "^1.5.0", "electron-store": "^6.0.1", "electron-updater": "^4.3.5", - "firebase": "^7.23.0", + "firebase": "^7.24.0", "graphql": "^15.3.0", "lodash": "^4.17.20", "moment": "^2.29.1", "node-notifier": "^8.0.0", "node-sass": "^4.14.1", - "query-string": "^6.13.5", - "react": "^16.13.1", - "react-dom": "^16.13.1", + "query-string": "^6.13.6", + "react": "^16.14.0", + "react-dom": "^16.14.0", "react-infinite-scroller": "^1.2.4", "react-redux": "^7.2.1", "react-router-dom": "^5.2.0", diff --git a/src/App/App.styles.scss b/src/App/App.styles.scss index 8b0e57c..54576c3 100644 --- a/src/App/App.styles.scss +++ b/src/App/App.styles.scss @@ -50,3 +50,8 @@ body { -webkit-box-shadow: inset 0 0 6px rgba(0, 0, 0, 0.3); background-color: #188fff; } + +//Required for the tab with infinite loading +.ant-tabs-content { + height: 100%; +} diff --git a/src/components/atoms/jobs-parts-graph/jobs-parts-graph.atom.jsx b/src/components/atoms/jobs-parts-graph/jobs-parts-graph.atom.jsx index 0ee2684..869f211 100644 --- a/src/components/atoms/jobs-parts-graph/jobs-parts-graph.atom.jsx +++ b/src/components/atoms/jobs-parts-graph/jobs-parts-graph.atom.jsx @@ -3,6 +3,7 @@ import React, { useMemo } from "react"; import { Cell, Pie, PieChart, ResponsiveContainer } from "recharts"; import ErrorResultAtom from "../error-result/error-result.atom"; import Dinero from "dinero.js"; +import partTypeConverterAtom from "../part-type-converter/part-type-converter.atom"; export default function JobPartsGraphAtom({ job, loading, @@ -35,24 +36,31 @@ export default function JobPartsGraphAtom({ if (loading) return ; if (!job) return ; - + console.log("data", data); return (
{price === "act_price" ? "Actual Price" : "Database Price"} - + `${entry.name} - ${entry.label}`} + label={(entry) => + `${partTypeConverterAtom(entry.name)} (${entry.label})` + } labelLine > {data.map((entry, index) => ( @@ -68,7 +76,7 @@ export default function JobPartsGraphAtom({ const getColor = (key) => { switch (key) { case "PAA": - return "tomato"; + return "slategray"; case "PAL": return "dodgeblue"; case "PAN": diff --git a/src/components/atoms/part-type-converter/part-type-converter.atom.jsx b/src/components/atoms/part-type-converter/part-type-converter.atom.jsx new file mode 100644 index 0000000..95fe49b --- /dev/null +++ b/src/components/atoms/part-type-converter/part-type-converter.atom.jsx @@ -0,0 +1,14 @@ +export default (part_type) => { + switch (part_type) { + case "PAA": + return "Aftermarket"; + case "PAE": + return "Existing"; + case "PAN": + return "OEM"; + case "PAL": + return "LKQ"; + default: + return "?"; + } +}; diff --git a/src/components/molecules/close-date-display/close-date-display.molecule.jsx b/src/components/molecules/close-date-display/close-date-display.molecule.jsx new file mode 100644 index 0000000..d9a29ed --- /dev/null +++ b/src/components/molecules/close-date-display/close-date-display.molecule.jsx @@ -0,0 +1,44 @@ +import { useMutation } from "@apollo/client"; +import { DatePicker, message, Spin } from "antd"; +import moment from "moment"; +import React, { useState } from "react"; +import { UPDATE_JOB } from "../../../graphql/jobs.queries"; + +export default function CloseDateDisplayMolecule({ jobId, close_date }) { + const [editMode, setEditMode] = useState(false); + const [value, setValue] = useState(moment(close_date)); + const [loading, setLoading] = useState(false); + const [updateJob] = useMutation(UPDATE_JOB); + + const handleChange = async (newDate) => { + setLoading(true); + setValue(newDate); + const result = await updateJob({ + variables: { jobId: jobId, job: { close_date: newDate } }, + }); + + if (!result.errors) { + message.success("Close date updated."); + } else { + message.error("Error updating job."); + } + setLoading(false); + }; + + if (editMode) + return ( +
setEditMode(false)}> + + {loading && } +
+ ); + + return ( +
setEditMode(true)}> + {value.isValid() ? value.format("MM/DD/yyyy") : "No date set"} +
+ ); +} diff --git a/src/components/molecules/jobs-detail-description/jobs-detail-description.molecule.jsx b/src/components/molecules/jobs-detail-description/jobs-detail-description.molecule.jsx index bfa497d..911584d 100644 --- a/src/components/molecules/jobs-detail-description/jobs-detail-description.molecule.jsx +++ b/src/components/molecules/jobs-detail-description/jobs-detail-description.molecule.jsx @@ -2,6 +2,7 @@ import { Descriptions, PageHeader, Skeleton } from "antd"; import React from "react"; import CurrencyFormatterAtom from "../../atoms/currency-formatter/currency-formatter.atom"; import ErrorResultAtom from "../../atoms/error-result/error-result.atom"; +import CloseDateDisplayMolecule from "../close-date-display/close-date-display.molecule"; export default function JobsDetailDescriptionMolecule({ loading, job }) { if (loading) return ; @@ -19,6 +20,12 @@ export default function JobsDetailDescriptionMolecule({ loading, job }) { {job.group} {job.v_age} + + +
diff --git a/src/components/molecules/jobs-lines-table/jobs-lines-table.molecule.jsx b/src/components/molecules/jobs-lines-table/jobs-lines-table.molecule.jsx index 93bc08c..526961a 100644 --- a/src/components/molecules/jobs-lines-table/jobs-lines-table.molecule.jsx +++ b/src/components/molecules/jobs-lines-table/jobs-lines-table.molecule.jsx @@ -1,6 +1,7 @@ import { Table } from "antd"; import React from "react"; import CurrencyFormatterAtom from "../../atoms/currency-formatter/currency-formatter.atom"; +import partTypeConverterAtom from "../../atoms/part-type-converter/part-type-converter.atom"; import PriceDiffPcFormatterAtom from "../../atoms/price-diff-pc-formatter/price-diff-pc-formatter.atom"; export default function JobLinesTableMolecule({ loading, job }) { @@ -25,6 +26,7 @@ export default function JobLinesTableMolecule({ loading, job }) { title: "Part Type", dataIndex: "part_type", key: "part_type", + render: (text, record) => partTypeConverterAtom(text), }, { title: "Part Number", diff --git a/src/components/molecules/jobs-list-item/jobs-list-item.molecule.jsx b/src/components/molecules/jobs-list-item/jobs-list-item.molecule.jsx new file mode 100644 index 0000000..8dfdbc9 --- /dev/null +++ b/src/components/molecules/jobs-list-item/jobs-list-item.molecule.jsx @@ -0,0 +1,62 @@ +import { List } from "antd"; +import React from "react"; +import { connect } from "react-redux"; +import { createStructuredSelector } from "reselect"; +import { setSelectedJobId } from "../../../redux/application/application.actions"; +import { selectSelectedJobId } from "../../../redux/application/application.selectors"; +import TimeAgoFormatter from "../../atoms/time-ago-formatter/time-ago-formatter.atom"; +import "./jobs-list-item.styles.scss"; + +const mapStateToProps = createStructuredSelector({ + selectedJobId: selectSelectedJobId, +}); +const mapDispatchToProps = (dispatch) => ({ + setSelectedJobId: (jobId) => dispatch(setSelectedJobId(jobId)), +}); + +export function JobsListItemMolecule({ + selectedJobId, + setSelectedJobId, + item, +}) { + const handleSelect = (jobId) => { + setSelectedJobId(jobId); + }; + + return ( + handleSelect(item.id)} + > +
+
+ {item.clm_no || "No Claim Number"} + + {item.updated_at} + +
+ +
{item.ins_co_nm || "No Insurance Co."}
+
{`${item.ownr_fn} ${item.ownr_ln}`}
+
+ {`${item.v_model_yr} ${item.v_makedesc} ${item.v_model} ${item.v_vin}`} +
+
+
+ ); +} +export default connect( + mapStateToProps, + mapDispatchToProps +)(JobsListItemMolecule); diff --git a/src/components/molecules/jobs-list-item/jobs-list-item.styles.scss b/src/components/molecules/jobs-list-item/jobs-list-item.styles.scss new file mode 100644 index 0000000..6f209f1 --- /dev/null +++ b/src/components/molecules/jobs-list-item/jobs-list-item.styles.scss @@ -0,0 +1,22 @@ + +.jobs-list-item { + padding: 0; + margin: 0; + + .jobs-list-item-content { + &-selected { + border-left: 3px solid #1890ff; + } + + display: inline; + margin: 0.5rem; + padding: 0.5rem; + width: 100%; + } + + cursor: pointer; + &:hover { + background-color: #e6f7ff; + } + } + \ No newline at end of file diff --git a/src/components/molecules/jobs-targets-stats/jobs-targets-stats.molecule.jsx b/src/components/molecules/jobs-targets-stats/jobs-targets-stats.molecule.jsx index 71e90d2..cd92bd9 100644 --- a/src/components/molecules/jobs-targets-stats/jobs-targets-stats.molecule.jsx +++ b/src/components/molecules/jobs-targets-stats/jobs-targets-stats.molecule.jsx @@ -40,6 +40,8 @@ export default function JobsTargetsStatsMolecule({ loading, job }) { display: "flex", alignItems: "center", justifyContent: "space-around", + marginTop: "1rem", + marginBottom: "1rem", }} > diff --git a/src/components/organisms/jobs-detail/jobs-detail.organism.jsx b/src/components/organisms/jobs-detail/jobs-detail.organism.jsx index 0711337..dbf01f7 100644 --- a/src/components/organisms/jobs-detail/jobs-detail.organism.jsx +++ b/src/components/organisms/jobs-detail/jobs-detail.organism.jsx @@ -49,16 +49,23 @@ export function JobsDetailOrganism({ selectedJobId }) { loading={loading} job={data ? data.jobs_by_pk : null} /> -
- +
+
); diff --git a/src/components/organisms/jobs-detail/jobs-detail.organism.styles.scss b/src/components/organisms/jobs-detail/jobs-detail.organism.styles.scss index 2a8eb4a..ec34fd5 100644 --- a/src/components/organisms/jobs-detail/jobs-detail.organism.styles.scss +++ b/src/components/organisms/jobs-detail/jobs-detail.organism.styles.scss @@ -1,5 +1,4 @@ .jobs-detail-container { height: 100%; overflow-y: auto; - } diff --git a/src/components/organisms/jobs-list/jobs-list.organism.jsx b/src/components/organisms/jobs-list-latest/jobs-list-latest.organism.jsx similarity index 60% rename from src/components/organisms/jobs-list/jobs-list.organism.jsx rename to src/components/organisms/jobs-list-latest/jobs-list-latest.organism.jsx index aaef63a..4e2f9d1 100644 --- a/src/components/organisms/jobs-list/jobs-list.organism.jsx +++ b/src/components/organisms/jobs-list-latest/jobs-list-latest.organism.jsx @@ -1,6 +1,6 @@ import { SyncOutlined } from "@ant-design/icons"; import { useQuery } from "@apollo/client"; -import { Button, List, Spin } from "antd"; +import { Dropdown, List, Menu, Spin } from "antd"; import React, { useState } from "react"; import InfiniteScroll from "react-infinite-scroller"; import { connect } from "react-redux"; @@ -9,8 +9,9 @@ import { QUERY_ALL_JOBS_PAGINATED } from "../../../graphql/jobs.queries"; import { setSelectedJobId } from "../../../redux/application/application.actions"; import { selectSelectedJobId } from "../../../redux/application/application.selectors"; import ErrorResultAtom from "../../atoms/error-result/error-result.atom"; -import TimeAgoFormatter from "../../atoms/time-ago-formatter/time-ago-formatter.atom"; -import "./jobs-list.organism.styles.scss"; +import JobsListItemMolecule from "../../molecules/jobs-list-item/jobs-list-item.molecule"; +import "./jobs-list-latest.organism.styles.scss"; + const mapStateToProps = createStructuredSelector({ selectedJobId: selectSelectedJobId, }); @@ -33,6 +34,15 @@ export function JobsTableOrganism({ selectedJobId, setSelectedJobId }) { } ); + const menu = ( + + refetch()}> + + Reload + + + ); + const handleInfiniteOnLoad = (page) => { fetchMore({ variables: { @@ -62,10 +72,6 @@ export function JobsTableOrganism({ selectedJobId, setSelectedJobId }) { }); }; - const handleSelect = (jobId) => { - setSelectedJobId(jobId); - }; - if (error) return ( -
- ( - handleSelect(item.id)} - > -
-
- {item.clm_no || "No Claim Number"} - - {item.updated_at} - -
- -
{item.ins_co_nm || "No Insurance Co."}
-
{`${item.ownr_fn} ${item.ownr_ln}`}
-
- {`${item.v_model_yr} ${item.v_makedesc} ${item.v_model} ${item.v_vin}`} -
+ + } + > + {loading && state.hasMore && ( +
+
- - )} - > - {loading && state.hasMore && ( -
- -
- )} -
+ )} + +
{`${data ? data.jobs.length : 0} jobs loaded. ${ diff --git a/src/components/organisms/jobs-list-latest/jobs-list-latest.organism.styles.scss b/src/components/organisms/jobs-list-latest/jobs-list-latest.organism.styles.scss new file mode 100644 index 0000000..a43013a --- /dev/null +++ b/src/components/organisms/jobs-list-latest/jobs-list-latest.organism.styles.scss @@ -0,0 +1,9 @@ +.jobs-list-container { + height: 100%; +} + +.jobs-list-infinite-container { + overflow-y: auto; + overflow-x: hidden; + height: 100%; +} diff --git a/src/components/organisms/jobs-list/jobs-list.organism.styles.scss b/src/components/organisms/jobs-list/jobs-list.organism.styles.scss deleted file mode 100644 index 8662529..0000000 --- a/src/components/organisms/jobs-list/jobs-list.organism.styles.scss +++ /dev/null @@ -1,30 +0,0 @@ -.jobs-list-container { - height: 100%; -} - -.jobs-list-infinite-container { - overflow-y: auto; - overflow-x: hidden; - height: 100%; -} - -.jobs-list-item { - padding: 0; - margin: 0; - - .jobs-list-item-content { - &-selected { - border-left: 3px solid #1890ff; - } - - display: inline; - margin: 0.5rem; - padding: 0.5rem; - width: 100%; - } - - cursor: pointer; - &:hover { - background-color: #e6f7ff; - } -} diff --git a/src/components/pages/jobs/jobs.page.jsx b/src/components/pages/jobs/jobs.page.jsx index e46adf3..1fcd5ea 100644 --- a/src/components/pages/jobs/jobs.page.jsx +++ b/src/components/pages/jobs/jobs.page.jsx @@ -1,9 +1,9 @@ -import { Col, Row } from "antd"; +import { Col, Row, Tabs } from "antd"; import React from "react"; import { connect } from "react-redux"; import { createStructuredSelector } from "reselect"; import JobsDetailOrganism from "../../organisms/jobs-detail/jobs-detail.organism"; -import JobsListOrganism from "../../organisms/jobs-list/jobs-list.organism"; +import JobsListOrganism from "../../organisms/jobs-list-latest/jobs-list-latest.organism"; const mapStateToProps = createStructuredSelector({}); const mapDispatchToProps = (dispatch) => ({}); @@ -13,7 +13,14 @@ export function JobsPage() {
- + + + + + + Search + + diff --git a/src/graphql/jobs.queries.js b/src/graphql/jobs.queries.js index 05e3c6b..5431fed 100644 --- a/src/graphql/jobs.queries.js +++ b/src/graphql/jobs.queries.js @@ -41,8 +41,6 @@ export const QUERY_ALL_JOBS_PAGINATED = gql` id ins_co_nm clm_no - clm_total - ro_number updated_at } jobs_aggregate { @@ -71,6 +69,7 @@ export const QUERY_JOB_BY_PK = gql` group v_age loss_date + close_date joblines(order_by: { line_no: asc }) { id act_price @@ -123,6 +122,7 @@ export const UPDATE_JOB = gql` clm_total ro_number updated_at + close_date joblines(order_by: { unq_seq: asc }) { id act_price