mirror of
https://github.com/nocodb/nocodb.git
synced 2026-05-03 15:46:44 +00:00
* feat: Improved ui (#6156) * refactor: revert Signed-off-by: Pranav C <pranavxc@gmail.com> feat: shared base Signed-off-by: Pranav C <pranavxc@gmail.com> fix: remove duplicate import statement Signed-off-by: Pranav C <pranavxc@gmail.com> fix: disable starred & license menu Signed-off-by: Raju Udava <86527202+dstala@users.noreply.github.com> test: fix airtable wait issue Signed-off-by: Raju Udava <86527202+dstala@users.noreply.github.com> test: enable mysql in ci Signed-off-by: Raju Udava <86527202+dstala@users.noreply.github.com> test: fix checkbox order for sqlite Signed-off-by: Raju Udava <86527202+dstala@users.noreply.github.com> test: disable quick tests Signed-off-by: Raju Udava <86527202+dstala@users.noreply.github.com> test: fix dbType env variable for CI Signed-off-by: Raju Udava <86527202+dstala@users.noreply.github.com> test: workspace API access error fix Signed-off-by: Raju Udava <86527202+dstala@users.noreply.github.com> test: enable SQLite CI CD Signed-off-by: Raju Udava <86527202+dstala@users.noreply.github.com> test: use DB_TYPE env variable Signed-off-by: Raju Udava <86527202+dstala@users.noreply.github.com> test: enable SQLite UT Signed-off-by: Raju Udava <86527202+dstala@users.noreply.github.com> test: isHub cleanup Signed-off-by: Raju Udava <86527202+dstala@users.noreply.github.com> test: add check for EE Timezone spec Signed-off-by: Raju Udava <86527202+dstala@users.noreply.github.com> chore: cleanup Signed-off-by: Pranav C <pranavxc@gmail.com> chore: cleanup Signed-off-by: Pranav C <pranavxc@gmail.com> test: EE check fix Signed-off-by: Raju Udava <86527202+dstala@users.noreply.github.com> chore: test correction Signed-off-by: Pranav C <pranavxc@gmail.com> chore: sync latest changes Signed-off-by: Pranav C <pranavxc@gmail.com> test: set EE=false Signed-off-by: Raju Udava <86527202+dstala@users.noreply.github.com> test: set NC Edition to community in workflow file Signed-off-by: Raju Udava <86527202+dstala@users.noreply.github.com> chore: update sdk build command Signed-off-by: Pranav C <pranavxc@gmail.com> refactor: i18n and other changes Signed-off-by: Pranav C <pranavxc@gmail.com> feat: new ui Signed-off-by: Pranav C <pranavxc@gmail.com> * chore: sync tests Signed-off-by: Pranav C <pranavxc@gmail.com> * chore: lint Signed-off-by: Pranav C <pranavxc@gmail.com> * fix: shared view/base related bugs Signed-off-by: Pranav C <pranavxc@gmail.com> * test: checkbox verification sort order fix Signed-off-by: Raju Udava <86527202+dstala@users.noreply.github.com> * test: fix sqlite reset Signed-off-by: Raju Udava <86527202+dstala@users.noreply.github.com> * test: enable selfhosted runners Signed-off-by: Raju Udava <86527202+dstala@users.noreply.github.com> * docs: table ops (draft) Signed-off-by: Raju Udava <86527202+dstala@users.noreply.github.com> * Docs: screenshots for table-operations.md * refactor: introduce missing buttons Signed-off-by: Pranav C <pranavxc@gmail.com> * fix: get all fields Signed-off-by: Pranav C <pranavxc@gmail.com> * test: UT fix- new data API response Signed-off-by: Raju Udava <86527202+dstala@users.noreply.github.com> * test: EE is false Signed-off-by: Raju Udava <86527202+dstala@users.noreply.github.com> * test: webhook lookup as string in CE Signed-off-by: Raju Udava <86527202+dstala@users.noreply.github.com> * fix: include created_at and updated_at Signed-off-by: Pranav C <pranavxc@gmail.com> * test: fix UT newDataAPI response for PG Signed-off-by: Raju Udava <86527202+dstala@users.noreply.github.com> * fix: separate api for webhook related plugins Signed-off-by: Pranav C <pranavxc@gmail.com> * test: msyql filter corrections Signed-off-by: Raju Udava <86527202+dstala@users.noreply.github.com> * test: mysql group by test corrections Signed-off-by: Raju Udava <86527202+dstala@users.noreply.github.com> * test: fix datatype for rating field in groupby spec for pg Signed-off-by: Raju Udava <86527202+dstala@users.noreply.github.com> * test: kanban datatype correction Signed-off-by: Raju Udava <86527202+dstala@users.noreply.github.com> * test: column edit for mysql- rating field Signed-off-by: Raju Udava <86527202+dstala@users.noreply.github.com> * test: misc fixes Signed-off-by: Raju Udava <86527202+dstala@users.noreply.github.com> * test: enable 4 workers Signed-off-by: Raju Udava <86527202+dstala@users.noreply.github.com> * test: enable 2 workers per shard only Signed-off-by: Raju Udava <86527202+dstala@users.noreply.github.com> * docs: table CRUD * Rename table-operations.md to table-crud.md * Create column-crud.md * docs: row CRUD * Rename row.md to row-crud.md * docs: project crud * docs: toolbar (skeleton) * refactor: single page UI and bug fixes Signed-off-by: Pranav C <pranavxc@gmail.com> * chore: sync tests playwright Signed-off-by: Pranav C <pranavxc@gmail.com> * chore: add missing dependency Signed-off-by: Pranav C <pranavxc@gmail.com> * feat: single page ui, test corrections Signed-off-by: Pranav C <pranavxc@gmail.com> * chore: tests Signed-off-by: Pranav C <pranavxc@gmail.com> * test: project rename test correction Signed-off-by: Pranav C <pranavxc@gmail.com> * chore: remove only Signed-off-by: Pranav C <pranavxc@gmail.com> * test: remove wrong import statement Signed-off-by: Pranav C <pranavxc@gmail.com> * fix: delete option not visible in project context menu Signed-off-by: Raju Udava <86527202+dstala@users.noreply.github.com> * test: move ws access within isEE() Signed-off-by: Raju Udava <86527202+dstala@users.noreply.github.com> * test: fix groupby * test: groupby fix Signed-off-by: Raju Udava <86527202+dstala@users.noreply.github.com> * docs: signup & landing page * docs: project crud * docs: project-crud misc * docs: toolbar fields * docs: toolbar / filters * docs: toolbar / group by * docs: toolbar / sort * docs: toolbar / row height * docs: filters additional options * docs: file re-order Signed-off-by: Raju Udava <86527202+dstala@users.noreply.github.com> * docs: add links to column types * docs: code snippets * docs: links * docs: lookup * docs: rollup * docs: formula * docs: primary key * docs: display value * docs: development setup * docs: swagger * fix(nc-gui): encodeURIComponent for row id - closes: #6202 * docs: language * docs: expanded record * docs: import airtable * docs: airtable * docs: webhook * docs: revert file rename Signed-off-by: Raju Udava <86527202+dstala@users.noreply.github.com> * docs: account settings * docs: audit * docs: meta management * docs: project settings * docs: shared base * docs: shared view * docs: meta sync * docs: team-auth * docs: views * docs: fix URL * docs: URL corrections * fix: shared base, view related bugs Signed-off-by: Pranav C <pranavxc@gmail.com> * test: EE check for WSaccess Signed-off-by: Raju Udava <86527202+dstala@users.noreply.github.com> * test: exclude EE tests Signed-off-by: Raju Udava <86527202+dstala@users.noreply.github.com> * fix: missing project delete closes #6215 Signed-off-by: Pranav C <pranavxc@gmail.com> * fix: merge existing project meta if found closes #6216 Signed-off-by: Pranav C <pranavxc@gmail.com> * fix: merge existing project meta if found closes #6216 Signed-off-by: Pranav C <pranavxc@gmail.com> --------- Signed-off-by: Pranav C <pranavxc@gmail.com> Signed-off-by: Raju Udava <86527202+dstala@users.noreply.github.com> Co-authored-by: Raju Udava <86527202+dstala@users.noreply.github.com> Co-authored-by: DarkPhoenix2704 <anbarasun123@gmail.com> Co-authored-by: Wing-Kam Wong <wingkwong.code@gmail.com> * refactor: docs and other bug fixes Signed-off-by: Pranav C <pranavxc@gmail.com> * feat: populate default project on super admin signup Signed-off-by: Pranav C <pranavxc@gmail.com> * fix: include created project details in signup response if avail, missing Dockerfile Signed-off-by: Pranav C <pranavxc@gmail.com> * chore: use custom function for resolving ts path aliases Signed-off-by: Pranav C <pranavxc@gmail.com> * chore: add missing generate script Signed-off-by: Pranav C <pranavxc@gmail.com> * chore: webpack build correction - ts path resolve Signed-off-by: Pranav C <pranavxc@gmail.com> --------- Signed-off-by: Pranav C <pranavxc@gmail.com> Signed-off-by: Raju Udava <86527202+dstala@users.noreply.github.com> Co-authored-by: mertmit <mertmit99@gmail.com> Co-authored-by: Raju Udava <86527202+dstala@users.noreply.github.com> Co-authored-by: DarkPhoenix2704 <anbarasun123@gmail.com> Co-authored-by: Wing-Kam Wong <wingkwong.code@gmail.com>
205 lines
5.4 KiB
Vue
205 lines
5.4 KiB
Vue
<script setup lang="ts">
|
|
import { extractSdkResponseErrorMsg, iconMap, message, onMounted, useI18n, useNuxtApp } from '#imports'
|
|
|
|
const { t } = useI18n()
|
|
|
|
const { $api, $e } = useNuxtApp()
|
|
|
|
const apps = ref<null | any[]>(null)
|
|
|
|
const showPluginUninstallModal = ref(false)
|
|
|
|
const showPluginInstallModal = ref(false)
|
|
|
|
const pluginApp = ref<any>(null)
|
|
|
|
const fetchPluginApps = async () => {
|
|
try {
|
|
const plugins = (await $api.plugin.list()).list ?? []
|
|
|
|
apps.value = plugins.map((p) => ({
|
|
...p,
|
|
tags: p.tags ? p.tags.split(',') : [],
|
|
parsedInput: p.input && JSON.parse(p.input as string),
|
|
}))
|
|
} catch (e: any) {
|
|
message.error(await extractSdkResponseErrorMsg(e))
|
|
}
|
|
}
|
|
|
|
const resetPlugin = async () => {
|
|
try {
|
|
await $api.plugin.update(pluginApp.value.id, {
|
|
input: null,
|
|
active: false,
|
|
})
|
|
// Plugin uninstalled successfully
|
|
message.success(t('msg.success.pluginUninstalled'))
|
|
showPluginUninstallModal.value = false
|
|
await fetchPluginApps()
|
|
} catch (e: any) {
|
|
message.error(await extractSdkResponseErrorMsg(e))
|
|
}
|
|
|
|
$e('a:appstore:reset', { app: pluginApp.value.title })
|
|
}
|
|
|
|
const saved = async () => {
|
|
showPluginInstallModal.value = false
|
|
await fetchPluginApps()
|
|
$e('a:appstore:install', { app: pluginApp.value.title })
|
|
}
|
|
|
|
const showInstallPluginModal = async (app: any) => {
|
|
showPluginInstallModal.value = true
|
|
pluginApp.value = app
|
|
|
|
$e('c:appstore:install', { app: app.title })
|
|
}
|
|
|
|
const showResetPluginModal = async (app: any) => {
|
|
showPluginUninstallModal.value = true
|
|
pluginApp.value = app
|
|
}
|
|
|
|
onMounted(async () => {
|
|
if (apps.value === null) {
|
|
await fetchPluginApps()
|
|
}
|
|
})
|
|
</script>
|
|
|
|
<template>
|
|
<div>
|
|
<a-modal
|
|
v-model:visible="showPluginInstallModal"
|
|
:class="{ active: showPluginInstallModal }"
|
|
:closable="false"
|
|
centered
|
|
min-height="300"
|
|
:footer="null"
|
|
wrap-class-name="nc-modal-plugin-install"
|
|
v-bind="$attrs"
|
|
>
|
|
<LazyDashboardSettingsAppStoreAppInstall
|
|
v-if="pluginApp && showPluginInstallModal"
|
|
:id="pluginApp.id"
|
|
@close="showPluginInstallModal = false"
|
|
@saved="saved()"
|
|
/>
|
|
</a-modal>
|
|
|
|
<a-modal
|
|
v-model:visible="showPluginUninstallModal"
|
|
:closable="false"
|
|
width="24rem"
|
|
centered
|
|
:footer="null"
|
|
wrap-class-name="nc-modal-plugin-uninstall"
|
|
>
|
|
<div class="flex flex-col h-full">
|
|
<div class="flex flex-row justify-center mt-2 text-center w-full text-base">
|
|
{{ `Click on confirm to reset ${pluginApp && pluginApp.title}` }}
|
|
</div>
|
|
<div class="flex mt-6 justify-center space-x-2">
|
|
<a-button @click="showPluginUninstallModal = false"> {{ $t('general.cancel') }} </a-button>
|
|
<a-button type="primary" danger @click="resetPlugin"> {{ $t('general.confirm') }} </a-button>
|
|
</div>
|
|
</div>
|
|
</a-modal>
|
|
|
|
<div class="grid grid-cols-2 gap-x-2 gap-y-4 mt-4">
|
|
<a-card
|
|
v-for="(app, i) in apps"
|
|
:key="i"
|
|
:class="`relative flex overflow-x-hidden app-item-card !shadow-sm rounded-md w-full nc-app-store-card-${app.title}`"
|
|
:body-style="{ width: '100%' }"
|
|
>
|
|
<div class="install-btn flex flex-row justify-end space-x-1">
|
|
<a-button v-if="app.parsedInput" size="small" type="primary" @click="showInstallPluginModal(app)">
|
|
<div class="flex flex-row justify-center items-center caption capitalize nc-app-store-card-edit">
|
|
<IcRoundEdit class="pr-0.5" :height="12" />
|
|
Edit
|
|
</div>
|
|
</a-button>
|
|
|
|
<a-button v-if="app.parsedInput" size="small" outlined @click="showResetPluginModal(app)">
|
|
<div class="flex flex-row justify-center items-center caption capitalize nc-app-store-card-reset">
|
|
<component :is="iconMap.closeCircle" />
|
|
<div class="flex ml-0.5">Reset</div>
|
|
</div>
|
|
</a-button>
|
|
|
|
<a-button v-else size="small" type="primary" @click="showInstallPluginModal(app)">
|
|
<div class="flex flex-row justify-center items-center caption capitalize nc-app-store-card-install">
|
|
<component :is="iconMap.plus" />
|
|
Install
|
|
</div>
|
|
</a-button>
|
|
</div>
|
|
|
|
<div class="flex flex-row space-x-2 items-center justify-start w-full">
|
|
<div class="flex w-20 pl-3">
|
|
<img
|
|
v-if="app.title !== 'SMTP'"
|
|
class="avatar"
|
|
alt="logo"
|
|
:style="{
|
|
backgroundColor: app.title === 'SES' ? '#242f3e' : '',
|
|
}"
|
|
:src="app.logo"
|
|
/>
|
|
|
|
<div v-else />
|
|
</div>
|
|
|
|
<div class="flex flex-col flex-1 w-3/5 pl-3">
|
|
<a-typography-title :level="5">{{ app.title }}</a-typography-title>
|
|
|
|
{{ app.description }}
|
|
</div>
|
|
</div>
|
|
</a-card>
|
|
</div>
|
|
</div>
|
|
</template>
|
|
|
|
<style scoped lang="scss">
|
|
.app-item-card {
|
|
position: relative;
|
|
transition: 0.4s background-color;
|
|
|
|
.install-btn {
|
|
position: absolute;
|
|
opacity: 1;
|
|
right: -100%;
|
|
top: 10px;
|
|
transition: 0.4s opacity, 0.4s right;
|
|
}
|
|
|
|
&:hover .install-btn {
|
|
right: 10px;
|
|
opacity: 1;
|
|
}
|
|
}
|
|
|
|
.app-item-card {
|
|
transition: 0.4s background-color, 0.4s transform;
|
|
|
|
&:hover {
|
|
background: rgba(123, 126, 136, 0.1) !important;
|
|
}
|
|
}
|
|
|
|
.caption {
|
|
font-size: 0.7rem;
|
|
}
|
|
|
|
.avatar {
|
|
width: 5rem;
|
|
height: 5rem;
|
|
padding: 0.25rem;
|
|
object-fit: contain;
|
|
}
|
|
</style>
|