(() => {
return [
...uiTypes.filter((t) => !isEdit || !t.virtual),
@@ -85,6 +87,8 @@ watchEffect(() => {
+
+
@@ -97,6 +101,15 @@ watchEffect(() => {
+
+
+ {{ `Accept only valid ${formState.uidt}` }}
+
+
diff --git a/packages/nc-gui-v2/components/smartsheet-header/CellIcon.vue b/packages/nc-gui-v2/components/smartsheet-header/CellIcon.vue
index b288da87d3..10ea007c32 100644
--- a/packages/nc-gui-v2/components/smartsheet-header/CellIcon.vue
+++ b/packages/nc-gui-v2/components/smartsheet-header/CellIcon.vue
@@ -5,10 +5,13 @@ import FilePhoneIcon from '~icons/mdi/file-phone'
import { useColumn } from '#imports'
import KeyIcon from '~icons/mdi/key-variant'
import JSONIcon from '~icons/mdi/code-json'
+import ClockIcon from '~icons/mdi/clock-time-five'
// import FKIcon from '~icons/mdi/link-variant'
+import WebIcon from '~icons/mdi/web'
import TextAreaIcon from '~icons/mdi/card-text-outline'
import StringIcon from '~icons/mdi/alpha-a-box-outline'
import BooleanIcon from '~icons/mdi/check-box-outline'
+import YearIcon from '~icons/mdi/calendar'
import SingleSelectIcon from '~icons/mdi/radiobox-marked'
import MultiSelectIcon from '~icons/mdi/checkbox-multiple-marked'
import DatetimeIcon from '~icons/mdi/calendar-clock'
@@ -17,7 +20,6 @@ import RatingIcon from '~icons/mdi/star'
import GenericIcon from '~icons/mdi/square-rounded'
import NumericIcon from '~icons/mdi/numeric'
import AttachmentIcon from '~icons/mdi/image-multiple-outline'
-import URLIcon from '~icons/mdi/link'
import EmailIcon from '~icons/mdi/email'
import CurrencyIcon from '~icons/mdi/currency-usd-circle-outline'
import PercentIcon from '~icons/mdi/percent-outline'
@@ -48,6 +50,10 @@ const icon = computed(() => {
return TextAreaIcon
} else if (additionalColMeta.isEmail) {
return EmailIcon
+ } else if (additionalColMeta.isYear) {
+ return YearIcon
+ } else if (additionalColMeta.isTime) {
+ return ClockIcon
} else if (additionalColMeta.isRating) {
return RatingIcon
} else if (additionalColMeta.isAttachment) {
@@ -61,7 +67,7 @@ const icon = computed(() => {
// return FKIcon
// }
else if (additionalColMeta.isURL) {
- return URLIcon
+ return WebIcon
} else if (additionalColMeta.isCurrency) {
return CurrencyIcon
} else if (additionalColMeta.isPercent) {
diff --git a/packages/nc-gui-v2/composables/useInjectionState/index.ts b/packages/nc-gui-v2/composables/useInjectionState/index.ts
index 6cd0f3dbd9..a714fd5f3c 100644
--- a/packages/nc-gui-v2/composables/useInjectionState/index.ts
+++ b/packages/nc-gui-v2/composables/useInjectionState/index.ts
@@ -3,7 +3,7 @@ import type { InjectionKey } from 'vue'
export function useInjectionState(
composable: (...args: Arguments) => Return,
keyName = 'InjectionState',
-): readonly [useProvidingState: (...args: Arguments) => void, useInjectedState: () => Return | undefined] {
+): readonly [useInjectionState: (...args: Arguments) => Return, useInjectedState: () => Return | undefined] {
const key: string | InjectionKey = Symbol(keyName)
const useProvidingState = (...args: Arguments) => {
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",
diff --git a/packages/nc-gui-v2/utils/columnUtils.ts b/packages/nc-gui-v2/utils/columnUtils.ts
index 3db1717e66..1020e60851 100644
--- a/packages/nc-gui-v2/utils/columnUtils.ts
+++ b/packages/nc-gui-v2/utils/columnUtils.ts
@@ -3,6 +3,7 @@ import LinkVariant from '~icons/mdi/link-variant'
import TableColumnPlusBefore from '~icons/mdi/table-column-plus-before'
import FormatColorText from '~icons/mdi/format-color-text'
import TextSubject from '~icons/mdi/text-subject'
+import JSONIcon from '~icons/mdi/code-json'
import Attachment from '~icons/mdi/attachment'
import CheckboxMarkedOutline from '~icons/mdi/checkbox-marked-outline'
import FormatListBulletedSquare from '~icons/mdi/format-list-bulleted-square'
@@ -135,7 +136,7 @@ const uiTypes = [
},
{
name: UITypes.JSON,
- icon: 'mdi-code-json',
+ icon: JSONIcon,
},
{
name: UITypes.SpecificDBType,
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
+ }
+}
diff --git a/packages/nc-gui-v2/utils/durationHelper.ts b/packages/nc-gui-v2/utils/durationUtils.ts
similarity index 100%
rename from packages/nc-gui-v2/utils/durationHelper.ts
rename to packages/nc-gui-v2/utils/durationUtils.ts
diff --git a/packages/nc-gui-v2/utils/index.ts b/packages/nc-gui-v2/utils/index.ts
index e6850a4566..a0fc5854c5 100644
--- a/packages/nc-gui-v2/utils/index.ts
+++ b/packages/nc-gui-v2/utils/index.ts
@@ -1,7 +1,7 @@
export * from './colorsUtils'
export * from './dateTimeUtils'
export * from './deepCompare'
-export * from './durationHelper'
+export * from './durationUtils'
export * from './errorUtils'
export * from './fileUtils'
export * from './iconUtils'
@@ -11,3 +11,4 @@ export * from './projectCreateUtils'
export * from './urlUtils'
export * from './validation'
export * from './viewUtils'
+export * from './currencyUtils'