diff --git a/packages/nc-gui/assets/img/placeholder/api-tokens.png b/packages/nc-gui/assets/img/placeholder/api-tokens.png new file mode 100644 index 0000000000..2e7020d8da Binary files /dev/null and b/packages/nc-gui/assets/img/placeholder/api-tokens.png differ diff --git a/packages/nc-gui/assets/img/placeholder/invite-team.png b/packages/nc-gui/assets/img/placeholder/invite-team.png new file mode 100644 index 0000000000..f9c7b5f77a Binary files /dev/null and b/packages/nc-gui/assets/img/placeholder/invite-team.png differ diff --git a/packages/nc-gui/assets/img/placeholder/link-records.png b/packages/nc-gui/assets/img/placeholder/link-records.png new file mode 100644 index 0000000000..28d4ec92fa Binary files /dev/null and b/packages/nc-gui/assets/img/placeholder/link-records.png differ diff --git a/packages/nc-gui/assets/img/placeholder/multi-field-editor.png b/packages/nc-gui/assets/img/placeholder/multi-field-editor.png new file mode 100644 index 0000000000..62dec5cae4 Binary files /dev/null and b/packages/nc-gui/assets/img/placeholder/multi-field-editor.png differ diff --git a/packages/nc-gui/assets/img/placeholder/table.png b/packages/nc-gui/assets/img/placeholder/table.png new file mode 100644 index 0000000000..182fa1dada Binary files /dev/null and b/packages/nc-gui/assets/img/placeholder/table.png differ diff --git a/packages/nc-gui/assets/img/placeholder/webhooks.png b/packages/nc-gui/assets/img/placeholder/webhooks.png new file mode 100644 index 0000000000..0bc49da858 Binary files /dev/null and b/packages/nc-gui/assets/img/placeholder/webhooks.png differ diff --git a/packages/nc-gui/components/account/Token.vue b/packages/nc-gui/components/account/Token.vue index 72fff9fe80..9c3d612fb0 100644 --- a/packages/nc-gui/components/account/Token.vue +++ b/packages/nc-gui/components/account/Token.vue @@ -45,6 +45,8 @@ const pagination = reactive({ pageSize: 10, }) +const isLoadingAllTokens = ref(true) + const setDefaultTokenName = () => { selectedTokenData.value.description = extractNextDefaultName( [...allTokens.value.map((el) => el?.description || '')], @@ -94,7 +96,7 @@ const updateAllTokens = (type: 'delete' | 'add', token: IApiTokenInfo) => { setDefaultTokenName() } -const loadTokens = async (page = currentPage.value, limit = currentLimit.value) => { +const loadTokens = async (page = currentPage.value, limit = currentLimit.value, hideShowNewToken = false) => { currentPage.value = page try { const response: any = await api.orgTokens.list({ @@ -103,18 +105,30 @@ const loadTokens = async (page = currentPage.value, limit = currentLimit.value) offset: searchText.value.length === 0 ? (page - 1) * limit : 0, }, } as RequestParams) - if (!response) return + if (!response) { + isLoadingAllTokens.value = false + return + } pagination.total = response.pageInfo.totalRows ?? 0 pagination.pageSize = 10 tokens.value = response.list as IApiTokenInfo[] + if (hideShowNewToken) { + showNewTokenModal.value = false + selectedTokenData.value = {} + } + if (!allTokens.value.length) { await loadAllTokens(pagination.total) } } catch (e: any) { message.error(await extractSdkResponseErrorMsg(e)) + } finally { + if (isLoadingAllTokens.value) { + isLoadingAllTokens.value = false + } } } @@ -159,11 +173,10 @@ const generateToken = async () => { if (!isValidTokenName.value) return try { const token = await api.orgTokens.create(selectedTokenData.value) - showNewTokenModal.value = false + // Token generated successfully // message.success(t('msg.success.tokenGenerated')) - selectedTokenData.value = {} - await loadTokens() + await loadTokens(currentPage.value, currentLimit.value, true) updateAllTokens('add', token as IApiTokenInfo) } catch (e: any) { @@ -216,7 +229,7 @@ const handleCancel = () => {
{{ $t('title.apiTokens') }}
- + {
{{ $t('msg.apiTokenCreate') }} -
+
{{ $t('title.tokenName') }} @@ -268,6 +281,7 @@ const handleCancel = () => { class="!rounded-lg !py-1" placeholder="Token Name" data-testid="nc-token-input" + :disabled="isLoading" @press-enter="generateToken" /> { {{ $t('general.cancel') }} - + {{ $t('general.save') }}
@@ -329,15 +337,15 @@ const handleCancel = () => { @click="hideOrShowToken(el.token as string)" /> - + - + {
+
+ + +
{{ $t('placeholder.noTokenCreated') }}
+
+ {{ $t('placeholder.noTokenCreatedLabel') }} +
+ + + + + + +
{ class="w-4 h-4 text-primary" />
- +
{{ $t('msg.info.roles.orgCreator') }} - +
{ class="w-4 h-4 text-primary" />
- +
{{ $t('msg.info.roles.orgViewer') }} - +
@@ -345,6 +345,18 @@ const openDeleteModal = (user: UserType) => {
+
+
+ {{ $t('placeholder.inviteYourTeam') }} +
+
+ {{ $t('placeholder.inviteYourTeamLabel') }} +
+ +
diff --git a/packages/nc-gui/components/project/AllTables.vue b/packages/nc-gui/components/project/AllTables.vue index 5dcdbaad1e..ede8189adf 100644 --- a/packages/nc-gui/components/project/AllTables.vue +++ b/packages/nc-gui/components/project/AllTables.vue @@ -121,44 +121,56 @@ const onCreateBaseClick = () => {
-
-
{{ $t('objects.table') }}
-
{{ $t('general.source') }}
-
{{ $t('labels.createdOn') }}
-
-
+ +
+ +
+
{{ $t('placeholder.createTable') }}
+
+ {{ $t('placeholder.createTableLabel') }}
+
diff --git a/packages/nc-gui/components/smartsheet/details/Fields.vue b/packages/nc-gui/components/smartsheet/details/Fields.vue index 58595e85e0..27815e7806 100644 --- a/packages/nc-gui/components/smartsheet/details/Fields.vue +++ b/packages/nc-gui/components/smartsheet/details/Fields.vue @@ -1254,7 +1254,7 @@ watch( @add="onFieldAdd" />
- +
{{ $t('labels.multiField.selectField') }}
{{ $t('labels.multiField.selectFieldLabel') }} diff --git a/packages/nc-gui/components/smartsheet/details/Webhooks.vue b/packages/nc-gui/components/smartsheet/details/Webhooks.vue index 3b90d104e4..0dc8046762 100644 --- a/packages/nc-gui/components/smartsheet/details/Webhooks.vue +++ b/packages/nc-gui/components/smartsheet/details/Webhooks.vue @@ -197,13 +197,10 @@ watch(
-
- -
{{ $t('msg.createWebhookMsg1') }}
-
-
{{ $t('msg.createWebhookMsg2') }}
-
{{ $t('msg.createWebhookMsg3') }}
-
+
+ +
{{ $t('msg.createWebhookMsg1') }}
+
{{ $t('msg.createWebhookMsg2') }}
{{ $t('activity.newWebhook') }} diff --git a/packages/nc-gui/components/virtual-cell/components/ListChildItems.vue b/packages/nc-gui/components/virtual-cell/components/ListChildItems.vue index f4351b3df6..fed18d1b11 100644 --- a/packages/nc-gui/components/virtual-cell/components/ListChildItems.vue +++ b/packages/nc-gui/components/virtual-cell/components/ListChildItems.vue @@ -14,7 +14,6 @@ import { useSmartsheetRowStoreOrThrow, useVModel, } from '#imports' -import InboxIcon from '~icons/nc-icons/inbox' interface Prop { modelValue?: boolean @@ -300,19 +299,20 @@ onUnmounted(() => {
-
- -

- {{ $t('msg.noRecordsAreLinkedFromTable') }} - {{ relatedTableMeta?.title }} -

+
+ +
{{ $t('msg.noLinkedRecords') }}
+
+ {{ $t('msg.clickLinkRecordsToAddLinkFromTable', { tableName: relatedTableMeta?.title }) }} +
+ -
{{ $t('title.linkMoreRecords') }}
+
{{ $t('title.linkRecords') }}
diff --git a/packages/nc-gui/components/workspace/CollaboratorsList.vue b/packages/nc-gui/components/workspace/CollaboratorsList.vue index 2f5912ab6a..f40602c2d2 100644 --- a/packages/nc-gui/components/workspace/CollaboratorsList.vue +++ b/packages/nc-gui/components/workspace/CollaboratorsList.vue @@ -152,6 +152,15 @@ onMounted(async () => {
+
+
+ {{ $t('placeholder.inviteYourTeam') }} +
+
+ {{ $t('placeholder.inviteYourTeamLabel') }} +
+ +
diff --git a/packages/nc-gui/lang/en.json b/packages/nc-gui/lang/en.json index c8875fb569..49b10ef9c6 100644 --- a/packages/nc-gui/lang/en.json +++ b/packages/nc-gui/lang/en.json @@ -332,6 +332,7 @@ "virtualRelation": "Virtual Relation", "linkMore": "Link More", "linkMoreRecords": "Link more records", + "linkRecords": "Link Records", "downloadFile": "Download File", "renameTable": "Rename Table", "renamingTable": "Renaming Table", @@ -398,6 +399,7 @@ "findRowByScanningCode": "Find record by scanning a QR or Barcode", "tokenManagement": "Token Management", "addNewToken": "Add new token", + "createNewToken": "Create new token", "accountSettings": "Account Settings", "resetPasswordMenu": "Reset Password", "tokens": "Tokens", @@ -665,7 +667,7 @@ "deletedField": "Deleted field", "incompleteConfiguration": "Incomplete configuration", "selectField": "Select a field", - "selectFieldLabel": "Make changes to field properties by selecting a field from the list" + "selectFieldLabel": "Begin by selecting a field to customise its properties and structure." } }, "activity": { @@ -959,7 +961,13 @@ "decimal7": "1.0000000", "decimal8": "1.00000000", "value": "Value", - "key": "Key" + "key": "Key", + "createTable": "Create your First Table!", + "createTableLabel": "Create your first table effortlessly, from scratch, or by importing/connecting to an external database.", + "noTokenCreated":"No API Tokens created", + "noTokenCreatedLabel" :"Begin by creating API tokens to unlock advanced functionalities.", + "inviteYourTeam": "Invite your team", + "inviteYourTeamLabel": "Streamline collaboration and productivity with your team – start by inviting them to join your workspace." }, "msg": { "clickToCopyFieldId": "Click to copy Field Id", @@ -1044,8 +1052,9 @@ "tooltip_desc": "A single record from table ", "tooltip_desc2": " can be linked with a single record from table " }, - "noRecordsAreLinkedFromTable": "No records are linked from table", + "clickLinkRecordsToAddLinkFromTable": "Click 'Link Records' to begin associating data with '{tableName}'.", "noRecordsLinked": "No records linked", + "noLinkedRecords": "No linked records", "recordsLinked": "records linked", "acceptOnlyValid": "Accepts only", "apiTokenCreate": "Create personal API tokens to use in automation or external apps.", @@ -1053,8 +1062,7 @@ "selectFieldToGroup": "Select Field to Group", "thereAreNoRecordsInTable": "There are no records in table", "createWebhookMsg1": "Get started with web-hooks!", - "createWebhookMsg2": "Create web-hooks to power you automations,", - "createWebhookMsg3": "Get notified as soon as there are changes in your data", + "createWebhookMsg2": "Power your automations. Get notified as soon as there are changes in your data", "areYouSureUWantTo": "Are you sure you want to delete the following", "areYouSureUWantToDeleteLabel": "Are you sure you want to {deleteLabel} the following", "idColumnRequired": "ID field is required, you can rename this later if required.",