From 810f7ceb655f635c80bd4b5743b1abf9eccafbfd Mon Sep 17 00:00:00 2001 From: Wing-Kam Wong Date: Tue, 2 Aug 2022 17:51:33 +0800 Subject: [PATCH 01/23] feat(gui-v2): add locale-codes --- packages/nc-gui-v2/package-lock.json | 60 ++++++++++++++++++++++++++++ packages/nc-gui-v2/package.json | 1 + 2 files changed, 61 insertions(+) diff --git a/packages/nc-gui-v2/package-lock.json b/packages/nc-gui-v2/package-lock.json index 8f0a2e375d..33942a1dde 100644 --- a/packages/nc-gui-v2/package-lock.json +++ b/packages/nc-gui-v2/package-lock.json @@ -11,6 +11,7 @@ "dayjs": "^1.11.3", "file-saver": "^2.0.5", "jwt-decode": "^3.1.2", + "locale-codes": "^1.3.1", "monaco-editor": "^0.33.0", "nocodb-sdk": "file:../nocodb-sdk", "papaparse": "^5.3.2", @@ -8554,6 +8555,14 @@ "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", "dev": true }, + "node_modules/iso639-codes": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/iso639-codes/-/iso639-codes-1.0.1.tgz", + "integrity": "sha512-jdTSv8yn6D7GODDrRtuWG7y3du3aoa+ki5H8h/Y48/NleNAd7Fw/M2niTTLXGH4QnqhJ98hg1JMQtP9csQ31Lg==", + "engines": { + "node": ">=8" + } + }, "node_modules/jest-worker": { "version": "26.6.2", "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-26.6.2.tgz", @@ -8801,6 +8810,11 @@ "integrity": "sha512-lxpCM3HTvquGxKGzHeknB/sUjuVoUElLlfYnXZT73K8geR9jQbroGlSCFBax9/0mpGoD3kzcMLnOlGQPJJNyqQ==", "dev": true }, + "node_modules/langs": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/langs/-/langs-2.0.0.tgz", + "integrity": "sha512-v4pxOBEQVN1WBTfB1crhTtxzNLZU9HPWgadlwzWKISJtt6Ku/CnpBrwVy+jFv8StjxsPfwPFzO0CMwdZLJ0/BA==" + }, "node_modules/lazystream": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/lazystream/-/lazystream-1.0.1.tgz", @@ -9001,6 +9015,19 @@ "url": "https://github.com/sponsors/antfu" } }, + "node_modules/locale-codes": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/locale-codes/-/locale-codes-1.3.1.tgz", + "integrity": "sha512-C7fxGkU4jAuHqavtKj4IhSD2yPEzChFMRfNHjzwIAz9JTbYHtBJDcQQgmJDezBogk9/vvgS7chKMhpVEKavk5A==", + "dependencies": { + "iso639-codes": "^1.0.1", + "langs": "^2.0.0", + "windows-locale": "^1.1.0" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/locate-path": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", @@ -14214,6 +14241,14 @@ "integrity": "sha512-sTitTPYnn23esFR3RlqYBWn4c45WGeLcsKzQiUpXJAyfcWkolvlYpV8FLo7JishK946oQwMFUCHXQ9AjGPKExw==", "dev": true }, + "node_modules/windows-locale": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/windows-locale/-/windows-locale-1.1.3.tgz", + "integrity": "sha512-0OlMOPNGj7GTB6C7WmqS3o4eydjnoYj0uwot2KJf7E0JUucwYwzkcvCWQwnuOV60WqDMeGJpSankgveNMj5r0g==", + "engines": { + "node": ">=v10.24.1" + } + }, "node_modules/wmf": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/wmf/-/wmf-1.0.2.tgz", @@ -20699,6 +20734,11 @@ "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", "dev": true }, + "iso639-codes": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/iso639-codes/-/iso639-codes-1.0.1.tgz", + "integrity": "sha512-jdTSv8yn6D7GODDrRtuWG7y3du3aoa+ki5H8h/Y48/NleNAd7Fw/M2niTTLXGH4QnqhJ98hg1JMQtP9csQ31Lg==" + }, "jest-worker": { "version": "26.6.2", "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-26.6.2.tgz", @@ -20893,6 +20933,11 @@ "integrity": "sha512-lxpCM3HTvquGxKGzHeknB/sUjuVoUElLlfYnXZT73K8geR9jQbroGlSCFBax9/0mpGoD3kzcMLnOlGQPJJNyqQ==", "dev": true }, + "langs": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/langs/-/langs-2.0.0.tgz", + "integrity": "sha512-v4pxOBEQVN1WBTfB1crhTtxzNLZU9HPWgadlwzWKISJtt6Ku/CnpBrwVy+jFv8StjxsPfwPFzO0CMwdZLJ0/BA==" + }, "lazystream": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/lazystream/-/lazystream-1.0.1.tgz", @@ -21050,6 +21095,16 @@ "integrity": "sha512-lL87ytIGP2FU5PWwNDo0w3WhIo2gopIAxPg9RxDYF7m4rr5ahuZxP22xnJHIvaLTe4Z9P6uKKY2UHiwyB4pcrw==", "dev": true }, + "locale-codes": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/locale-codes/-/locale-codes-1.3.1.tgz", + "integrity": "sha512-C7fxGkU4jAuHqavtKj4IhSD2yPEzChFMRfNHjzwIAz9JTbYHtBJDcQQgmJDezBogk9/vvgS7chKMhpVEKavk5A==", + "requires": { + "iso639-codes": "^1.0.1", + "langs": "^2.0.0", + "windows-locale": "^1.1.0" + } + }, "locate-path": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", @@ -24944,6 +24999,11 @@ } } }, + "windows-locale": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/windows-locale/-/windows-locale-1.1.3.tgz", + "integrity": "sha512-0OlMOPNGj7GTB6C7WmqS3o4eydjnoYj0uwot2KJf7E0JUucwYwzkcvCWQwnuOV60WqDMeGJpSankgveNMj5r0g==" + }, "wmf": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/wmf/-/wmf-1.0.2.tgz", diff --git a/packages/nc-gui-v2/package.json b/packages/nc-gui-v2/package.json index c038b5bb59..d954b68033 100644 --- a/packages/nc-gui-v2/package.json +++ b/packages/nc-gui-v2/package.json @@ -17,6 +17,7 @@ "dayjs": "^1.11.3", "file-saver": "^2.0.5", "jwt-decode": "^3.1.2", + "locale-codes": "^1.3.1", "monaco-editor": "^0.33.0", "nocodb-sdk": "file:../nocodb-sdk", "papaparse": "^5.3.2", From e96c043ea1c03cb810a8e30035a14d9b39c0e9fd Mon Sep 17 00:00:00 2001 From: Wing-Kam Wong Date: Tue, 2 Aug 2022 17:58:37 +0800 Subject: [PATCH 02/23] feat(gui-v2): add currency utils --- packages/nc-gui-v2/utils/currencyUtils.ts | 220 ++++++++++++++++++++++ 1 file changed, 220 insertions(+) create mode 100644 packages/nc-gui-v2/utils/currencyUtils.ts diff --git a/packages/nc-gui-v2/utils/currencyUtils.ts b/packages/nc-gui-v2/utils/currencyUtils.ts new file mode 100644 index 0000000000..5ac1ccb46f --- /dev/null +++ b/packages/nc-gui-v2/utils/currencyUtils.ts @@ -0,0 +1,220 @@ +import locale from 'locale-codes' + +export const currencyCodes = [ + 'AED', + 'AFN', + 'ALL', + 'AMD', + 'ANG', + 'AOA', + 'ARS', + 'AUD', + 'AWG', + 'AZN', + 'BAM', + 'BBD', + 'BDT', + 'BGN', + 'BHD', + 'BIF', + 'BMD', + 'BND', + 'BOB', + 'BOV', + 'BRL', + 'BSD', + 'BTN', + 'BWP', + 'BYR', + 'BZD', + 'CAD', + 'CDF', + 'CHE', + 'CHF', + 'CHW', + 'CLF', + 'CLP', + 'CNY', + 'COP', + 'COU', + 'CRC', + 'CUP', + 'CVE', + 'CYP', + 'CZK', + 'DJF', + 'DKK', + 'DOP', + 'DZD', + 'EEK', + 'EGP', + 'ERN', + 'ETB', + 'EUR', + 'FJD', + 'FKP', + 'GBP', + 'GEL', + 'GHC', + 'GIP', + 'GMD', + 'GNF', + 'GTQ', + 'GYD', + 'HKD', + 'HNL', + 'HRK', + 'HTG', + 'HUF', + 'IDR', + 'ILS', + 'INR', + 'IQD', + 'IRR', + 'ISK', + 'JMD', + 'JOD', + 'JPY', + 'KES', + 'KGS', + 'KHR', + 'KMF', + 'KPW', + 'KRW', + 'KWD', + 'KYD', + 'KZT', + 'LAK', + 'LBP', + 'LKR', + 'LRD', + 'LSL', + 'LTL', + 'LVL', + 'LYD', + 'MAD', + 'MDL', + 'MGA', + 'MKD', + 'MMK', + 'MNT', + 'MOP', + 'MRO', + 'MTL', + 'MUR', + 'MVR', + 'MWK', + 'MXN', + 'MXV', + 'MYR', + 'MZN', + 'NAD', + 'NGN', + 'NIO', + 'NOK', + 'NPR', + 'NZD', + 'OMR', + 'PAB', + 'PEN', + 'PGK', + 'PHP', + 'PKR', + 'PLN', + 'PYG', + 'QAR', + 'ROL', + 'RON', + 'RSD', + 'RUB', + 'RWF', + 'SAR', + 'SBD', + 'SCR', + 'SDD', + 'SEK', + 'SGD', + 'SHP', + 'SIT', + 'SKK', + 'SLL', + 'SOS', + 'SRD', + 'STD', + 'SYP', + 'SZL', + 'THB', + 'TJS', + 'TMM', + 'TND', + 'TOP', + 'TRY', + 'TTD', + 'TWD', + 'TZS', + 'UAH', + 'UGX', + 'USD', + 'USN', + 'USS', + 'UYU', + 'UZS', + 'VEB', + 'VND', + 'VUV', + 'WST', + 'XAF', + 'XAG', + 'XAU', + 'XBA', + 'XBB', + 'XBC', + 'XBD', + 'XCD', + 'XDR', + 'XFO', + 'XFU', + 'XOF', + 'XPD', + 'XPF', + 'XPT', + 'XTS', + 'XXX', + 'YER', + 'ZAR', + 'ZMK', + 'ZWD', +] + +export function validateCurrencyCode(v: string) { + return currencyCodes.includes(v) +} + +export function currencyLocales() { + const localeList = locale.all + .filter((l: Record) => { + try { + if (Intl.NumberFormat.supportedLocalesOf(l.tag).length > 0) { + return true + } + return false + } catch (e) { + return false + } + }) + .map((l: Record) => { + return { + text: `${l.name} (${l.tag})`, + value: l.tag, + } + }) + return localeList +} + +export function validateCurrencyLocale(v: string) { + try { + return Intl.NumberFormat.supportedLocalesOf(v).length > 0 + } catch (e) { + return false + } +} From 737449233b1d7433c6fbc74e5b2ba1798c349069 Mon Sep 17 00:00:00 2001 From: Wing-Kam Wong Date: Tue, 2 Aug 2022 18:02:05 +0800 Subject: [PATCH 03/23] wip(gui-v2): currency option --- .../smartsheet-column/CurrencyOptions.vue | 48 +++++++++++++++++++ 1 file changed, 48 insertions(+) create mode 100644 packages/nc-gui-v2/components/smartsheet-column/CurrencyOptions.vue diff --git a/packages/nc-gui-v2/components/smartsheet-column/CurrencyOptions.vue b/packages/nc-gui-v2/components/smartsheet-column/CurrencyOptions.vue new file mode 100644 index 0000000000..c0860336a6 --- /dev/null +++ b/packages/nc-gui-v2/components/smartsheet-column/CurrencyOptions.vue @@ -0,0 +1,48 @@ + + + \ No newline at end of file From 070f72587d7761c11e52bfc6c0b314fa644e2694 Mon Sep 17 00:00:00 2001 From: Wing-Kam Wong Date: Tue, 2 Aug 2022 18:07:46 +0800 Subject: [PATCH 04/23] feat(gui-v2): include SmartsheetColumnCurrencyOptions --- packages/nc-gui-v2/components/smartsheet-column/EditOrAdd.vue | 3 +++ 1 file changed, 3 insertions(+) diff --git a/packages/nc-gui-v2/components/smartsheet-column/EditOrAdd.vue b/packages/nc-gui-v2/components/smartsheet-column/EditOrAdd.vue index 1481f6294a..e41f4acfa5 100644 --- a/packages/nc-gui-v2/components/smartsheet-column/EditOrAdd.vue +++ b/packages/nc-gui-v2/components/smartsheet-column/EditOrAdd.vue @@ -2,6 +2,7 @@ import { computed, inject, useColumnCreateStoreOrThrow, useMetas, watchEffect } from '#imports' import { MetaInj } from '~/context' import { uiTypes } from '~/utils/columnUtils' +import { UITypes } from 'nocodb-sdk' import MdiPlusIcon from '~icons/mdi/plus-circle-outline' import MdiMinusIcon from '~icons/mdi/minus-circle-outline' @@ -84,6 +85,8 @@ watchEffect(() => { + +
Date: Tue, 2 Aug 2022 19:08:16 +0800 Subject: [PATCH 05/23] feat(gui-v2): add currency locale & currency code --- .../smartsheet-column/CurrencyOptions.vue | 37 ++++++++++++++++++- 1 file changed, 35 insertions(+), 2 deletions(-) diff --git a/packages/nc-gui-v2/components/smartsheet-column/CurrencyOptions.vue b/packages/nc-gui-v2/components/smartsheet-column/CurrencyOptions.vue index c0860336a6..fec1497bf6 100644 --- a/packages/nc-gui-v2/components/smartsheet-column/CurrencyOptions.vue +++ b/packages/nc-gui-v2/components/smartsheet-column/CurrencyOptions.vue @@ -2,8 +2,19 @@ import { useColumnCreateStoreOrThrow, useProject } from '#imports' import { currencyCodes, currencyLocales, validateCurrencyCode, validateCurrencyLocale } from '@/utils/currencyUtils' +interface Option { + label: string + value: string +} + const { formState, validateInfos, setAdditionalValidations, sqlUi, onDataTypeChange, onAlter } = useColumnCreateStoreOrThrow() +// set additional validations +setAdditionalValidations({ + 'meta.currency_locale': [isValidCurrencyLocale], + 'meta.currency_code': [isValidCurrencyCode], +}) + const { isPg } = useProject() const colMeta = ref({ @@ -29,6 +40,10 @@ const message = computed(() => { if (isMoney && isPg) return "PostgreSQL 'money' type has own currency settings" return '' }) + +function filterOption(input: string, option: Option) { + return option.value.toUpperCase().includes(input.toUpperCase()) +} - + + + + + + + - \ No newline at end of file + From 0e33b36fb98df4371c6ca916997d49d95535b6e3 Mon Sep 17 00:00:00 2001 From: Wing-Kam Wong Date: Tue, 2 Aug 2022 20:08:52 +0800 Subject: [PATCH 06/23] fix(gui-v2): remove setAdditionalValidations --- .../nc-gui-v2/components/smartsheet-column/AdvancedOptions.vue | 3 --- 1 file changed, 3 deletions(-) diff --git a/packages/nc-gui-v2/components/smartsheet-column/AdvancedOptions.vue b/packages/nc-gui-v2/components/smartsheet-column/AdvancedOptions.vue index 043982561c..26bf40e44f 100644 --- a/packages/nc-gui-v2/components/smartsheet-column/AdvancedOptions.vue +++ b/packages/nc-gui-v2/components/smartsheet-column/AdvancedOptions.vue @@ -5,9 +5,6 @@ const { formState, validateInfos, setAdditionalValidations, sqlUi, onDataTypeCha const dataTypes = computed(() => sqlUi?.value?.getDataTypeListForUiType(formState)) -// set additional validations -setAdditionalValidations({}) - // to avoid type error with checkbox formState.value.rqd = !!formState.value.rqd formState.value.pk = !!formState.value.pk From be240083be91b79c11f315153db665820d5ee211 Mon Sep 17 00:00:00 2001 From: Wing-Kam Wong Date: Tue, 2 Aug 2022 20:09:30 +0800 Subject: [PATCH 07/23] feat(gui-v2): add validators, locale & currency code dropdown --- .../smartsheet-column/CurrencyOptions.vue | 70 +++++++++++-------- 1 file changed, 41 insertions(+), 29 deletions(-) diff --git a/packages/nc-gui-v2/components/smartsheet-column/CurrencyOptions.vue b/packages/nc-gui-v2/components/smartsheet-column/CurrencyOptions.vue index fec1497bf6..1fd62206e5 100644 --- a/packages/nc-gui-v2/components/smartsheet-column/CurrencyOptions.vue +++ b/packages/nc-gui-v2/components/smartsheet-column/CurrencyOptions.vue @@ -9,35 +9,51 @@ interface Option { const { formState, validateInfos, setAdditionalValidations, sqlUi, onDataTypeChange, onAlter } = useColumnCreateStoreOrThrow() +const validators = computed(() => { + return { + 'meta.currency_locale': [ + { + validator: (_: any, locale: any) => { + return new Promise((resolve, reject) => { + if (!validateCurrencyLocale(locale)) { + return reject(new Error('Invalid locale')) + } + resolve() + }) + }, + }, + ], + 'meta.currency_code': [ + { + validator: (_: any, currencyCode: any) => { + return new Promise((resolve, reject) => { + console.log("currencyCode=" + currencyCode) + if (!validateCurrencyCode(currencyCode)) { + return reject(new Error('Invalid Currency Code')) + } + resolve() + }) + }, + }, + ], + } +}) + // set additional validations setAdditionalValidations({ - 'meta.currency_locale': [isValidCurrencyLocale], - 'meta.currency_code': [isValidCurrencyCode], + ...validators.value, }) const { isPg } = useProject() -const colMeta = ref({ - currency_locale: 'en-US', - currency_code: 'USD', -}) - const currencyList = ref(currencyCodes) const currencyLocaleList = ref(currencyLocales()) -function isValidCurrencyLocale(locale: string) { - return validateCurrencyLocale(locale) || 'Invalid locale' -} - -function isValidCurrencyCode(currencyCode: string) { - return validateCurrencyLocale(currencyCode) || 'Invalid Currency Code' -} - const isMoney = computed(() => formState.value.dt === 'money') const message = computed(() => { - if (isMoney && isPg) return "PostgreSQL 'money' type has own currency settings" + if (isMoney.value && isPg) return "PostgreSQL 'money' type has own currency settings" return '' }) @@ -53,29 +69,25 @@ function filterOption(input: string, option: Option) { - - + - - - + + + + {{ currencyCode }} + + - + \ No newline at end of file From 964fb3258987229ea0068dc51829d98a1790a496 Mon Sep 17 00:00:00 2001 From: Wing-Kam Wong Date: Tue, 2 Aug 2022 23:53:47 +0800 Subject: [PATCH 08/23] feat(gui-v2): add label for currency locale & code --- .../smartsheet-column/CurrencyOptions.vue | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-) diff --git a/packages/nc-gui-v2/components/smartsheet-column/CurrencyOptions.vue b/packages/nc-gui-v2/components/smartsheet-column/CurrencyOptions.vue index 1fd62206e5..7b886168b0 100644 --- a/packages/nc-gui-v2/components/smartsheet-column/CurrencyOptions.vue +++ b/packages/nc-gui-v2/components/smartsheet-column/CurrencyOptions.vue @@ -27,7 +27,6 @@ const validators = computed(() => { { validator: (_: any, currencyCode: any) => { return new Promise((resolve, reject) => { - console.log("currencyCode=" + currencyCode) if (!validateCurrencyCode(currencyCode)) { return reject(new Error('Invalid Currency Code')) } @@ -69,9 +68,10 @@ function filterOption(input: string, option: Option) { - + - - + + {{ currencyCode }} @@ -90,4 +96,4 @@ function filterOption(input: string, option: Option) { - \ No newline at end of file + From d1ef8bbb45e0aeb33ef16a6c3c207873e882ec94 Mon Sep 17 00:00:00 2001 From: Muhammed Mustafa Date: Tue, 2 Aug 2022 23:42:17 +0530 Subject: [PATCH 09/23] chore/gui-v2-improved-email-json-phonenumber-url-year-time-column --- .../components/smartsheet-column/EditOrAdd.vue | 12 ++++++++++++ .../components/smartsheet-header/CellIcon.vue | 10 ++++++++-- packages/nc-gui-v2/utils/columnUtils.ts | 3 ++- 3 files changed, 22 insertions(+), 3 deletions(-) diff --git a/packages/nc-gui-v2/components/smartsheet-column/EditOrAdd.vue b/packages/nc-gui-v2/components/smartsheet-column/EditOrAdd.vue index 1481f6294a..835b3d789d 100644 --- a/packages/nc-gui-v2/components/smartsheet-column/EditOrAdd.vue +++ b/packages/nc-gui-v2/components/smartsheet-column/EditOrAdd.vue @@ -1,4 +1,5 @@