diff --git a/.cspell.json b/.cspell.json index e09e6a7ebef..002194d180c 100644 --- a/.cspell.json +++ b/.cspell.json @@ -82,6 +82,7 @@ "COMPATBILITY", "confs", "Consolas", + "Containerised", "cpath", "cpcommerce", "cpus", @@ -1081,6 +1082,9 @@ "Rsya", "rivo", "mergify", - "ncdu" + "ncdu", + "interactjs", + "ocpu", + "Twillio" ] } diff --git a/.github/workflows/auto-backport-master-to-develop.yml b/.github/workflows/auto-backport-master-to-develop.yml index a98ad54e654..433a3427f8c 100644 --- a/.github/workflows/auto-backport-master-to-develop.yml +++ b/.github/workflows/auto-backport-master-to-develop.yml @@ -6,18 +6,17 @@ on: - master permissions: - contents: read + contents: write pull-requests: write jobs: create-pr: runs-on: ubuntu-latest - # Skip if the commit message contains merge-related keywords if: | !contains(github.event.head_commit.message, 'Merge pull request') && !contains(github.event.head_commit.message, 'Merge branch') && !startsWith(github.event.head_commit.message, 'Merge') - + steps: - name: Checkout repository uses: actions/checkout@v4 @@ -30,21 +29,33 @@ jobs: git config --global user.name "github-actions[bot]" git config --global user.email "github-actions[bot]@users.noreply.github.com" - - name: Get commit details - id: commit-info + - name: Prepare backport_master branch (Rebase) run: | git fetch origin develop + git fetch origin master - COMMITS=$(git log origin/develop..HEAD --pretty=format:"- %h %s") - - # Store commits in a file to handle multiline content + # Create/update backport_master from develop + git checkout -B backport_master origin/develop + + # Rebase onto master to avoid merge commits + git rebase origin/master || { + echo "Rebase conflict detected, aborting." + git rebase --abort + exit 1 + } + + git push origin backport_master --force-with-lease + + - name: Get commit details + run: | + git fetch origin develop + COMMITS=$(git log origin/develop..origin/backport_master --pretty=format:"- %h %s") echo "$COMMITS" > commits.txt - name: Check if PR already exists id: check-pr run: | - # Check if there's already an open PR from master to develop - EXISTING_PR=$(gh pr list --head master --base develop --state open --json number --jq '.[0].number // empty') + EXISTING_PR=$(gh pr list --head backport_master --base develop --state open --json number --jq '.[0].number // empty') echo "existing_pr=$EXISTING_PR" >> $GITHUB_OUTPUT env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} @@ -52,19 +63,15 @@ jobs: - name: Create Pull Request if: steps.check-pr.outputs.existing_pr == '' run: | - # Read commits from file COMMITS_LIST=$(cat commits.txt) - - # Create PR description with merge instruction - PR_DESCRIPTION="**Please perform \`Merge & Commit\` to preserve commit history to avoid commit conflicts** + PR_DESCRIPTION="**Please perform \`Merge & Commit\` to preserve commit history** $COMMITS_LIST" - # Create the PR gh pr create \ --title "chore: Sync Changes from Master to Develop" \ --body "$PR_DESCRIPTION" \ - --head master \ + --head backport_master \ --base develop env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} @@ -72,13 +79,11 @@ jobs: - name: Update existing PR if: steps.check-pr.outputs.existing_pr != '' run: | - # Read commits from file COMMITS_LIST=$(cat commits.txt) - PR_DESCRIPTION="**Please perform \`Merge & Commit\` to preserve commit history to avoid commit conflicts** + PR_DESCRIPTION="**Please perform \`Merge & Commit\` to preserve commit history** $COMMITS_LIST" - - # Update the existing PR + gh pr edit ${{ steps.check-pr.outputs.existing_pr }} \ --body "$PR_DESCRIPTION" env: diff --git a/backbone/tests/__init__.py b/backbone/tests/__init__.py index 5301bf841f4..559967729fe 100644 --- a/backbone/tests/__init__.py +++ b/backbone/tests/__init__.py @@ -1,4 +1,3 @@ -# -*- coding: utf-8 -*- # Copyright (c) 2020, Frappe and contributors # For license information, please see license.txt import unittest @@ -8,9 +7,7 @@ def run_tests(): - coverage = Coverage( - source=[str(Path(__file__).parent.parent)], omit=["*/tests/*"], branch=True - ) + coverage = Coverage(source=[str(Path(__file__).parent.parent)], omit=["*/tests/*"], branch=True) coverage.start() unittest.main(module=None, argv=["", "discover", "-s", "backbone"], exit=False) coverage.stop() diff --git a/backbone/tests/test_hypervisor.py b/backbone/tests/test_hypervisor.py index 798dba8b6b3..0df28fec4df 100644 --- a/backbone/tests/test_hypervisor.py +++ b/backbone/tests/test_hypervisor.py @@ -1,13 +1,13 @@ -# -*- coding: utf-8 -*- # Copyright (c) 2020, Frappe and contributors # For license information, please see license.txt -import unittest from unittest.mock import MagicMock +from frappe.tests.utils import FrappeTestCase + from backbone.hypervisor import Hypervisor -class TestHypervisor(unittest.TestCase): +class TestHypervisor(FrappeTestCase): def test_preinstall_pass(self): shell = MagicMock() shell.execute.return_value.returncode = 0 diff --git a/commitlint.config.js b/commitlint.config.js index 21be2907dd4..177f5ab9bb8 100644 --- a/commitlint.config.js +++ b/commitlint.config.js @@ -1,4 +1,4 @@ -module.exports = { +export default { extends: ['@commitlint/config-conventional'], rules: { 'header-max-length': [2, 'always', 72], diff --git a/dashboard/auto-imports.d.ts b/dashboard/auto-imports.d.ts new file mode 100644 index 00000000000..9d2400790b5 --- /dev/null +++ b/dashboard/auto-imports.d.ts @@ -0,0 +1,10 @@ +/* eslint-disable */ +/* prettier-ignore */ +// @ts-nocheck +// noinspection JSUnusedGlobalSymbols +// Generated by unplugin-auto-import +// biome-ignore lint: disable +export {} +declare global { + +} diff --git a/dashboard/generateThemeConfig.cjs b/dashboard/generateThemeConfig.cjs deleted file mode 100644 index 56c58774e73..00000000000 --- a/dashboard/generateThemeConfig.cjs +++ /dev/null @@ -1,10 +0,0 @@ -/** - * This node script resolves the tailwind config and dumps it as a json in - * tailwind.theme.json which is later imported into the app. - */ -let fs = require('fs'); -let resolveConfig = require('tailwindcss/resolveConfig'); -let config = require('./tailwind.config.cjs'); -let { theme } = resolveConfig(config); - -fs.writeFileSync('./tailwind.theme.json', JSON.stringify(theme, null, 2)); diff --git a/dashboard/index.html b/dashboard/index.html index e2e06dc1687..b8a3f1a027d 100644 --- a/dashboard/index.html +++ b/dashboard/index.html @@ -5,7 +5,7 @@ Frappe Cloud - + @@ -22,13 +22,6 @@
- - - - + diff --git a/dashboard/package.json b/dashboard/package.json index 1ff27d034b0..4064fe312d6 100644 --- a/dashboard/package.json +++ b/dashboard/package.json @@ -4,10 +4,8 @@ "private": true, "type": "module", "scripts": { - "dev": "yarn generate-theme-config && vite", - "build": "yarn generate-theme-config && vite build --base=/assets/press/dashboard/ && yarn copy-html-entry", - "copy-html-entry": "cp ../press/public/dashboard/index.html ../press/www/dashboard.html", - "generate-theme-config": "node ./generateThemeConfig.cjs", + "dev": "vite", + "build": "vite build", "test": "vitest", "coverage": "vitest run --coverage", "lint": "eslint src" @@ -30,7 +28,7 @@ "echarts": "^5.4.3", "feather-icons": "^4.26.0", "frappe-charts": "2.0.0-rc22", - "frappe-ui": "^0.1.108", + "frappe-ui": "0.1.168", "fuse.js": "6.6.2", "libarchive.js": "^1.3.0", "lodash": "^4.17.19", @@ -43,11 +41,11 @@ "sql-formatter": "^15.4.10", "unplugin-icons": "^0.17.0", "unplugin-vue-components": "^0.25.2", - "vue": "^3.4.12", + "vue": "^3.5.15", "vue-codemirror": "^6.1.1", "vue-echarts": "^6.6.1", "vue-qrcode": "^2.2.2", - "vue-router": "^4.0.5", + "vue-router": "^4.1.6", "vue-sonner": "^1.2.5" }, "devDependencies": { @@ -75,7 +73,7 @@ "postcss-easy-import": "^4.0.0", "prettier": "^2.5.1", "prettier-plugin-tailwindcss": "^0.1.8", - "tailwindcss": "^3.2", + "tailwindcss": "^3.4", "typescript": "^5.4.3", "vite": "5.0.13", "vite-plugin-rewrite-all": "^1.0.1", diff --git a/dashboard/src/App.vue b/dashboard/src/App.vue index 8524365608a..1c686d65331 100644 --- a/dashboard/src/App.vue +++ b/dashboard/src/App.vue @@ -1,74 +1,98 @@ - + diff --git a/dashboard/src2/components/ActionButton.vue b/dashboard/src/components/ActionButton.vue similarity index 90% rename from dashboard/src2/components/ActionButton.vue rename to dashboard/src/components/ActionButton.vue index f6eb4f7d9d2..dc7adec02bc 100644 --- a/dashboard/src2/components/ActionButton.vue +++ b/dashboard/src/components/ActionButton.vue @@ -19,7 +19,7 @@ export default { name: 'ActionButton', components: { Button, - Dropdown + Dropdown, }, computed: { buttonProps() { @@ -37,14 +37,14 @@ export default { label: 'Options', variant: 'ghost', slots: { - icon: icon('more-horizontal') - } + icon: icon('more-horizontal'), + }, }, ...this.$attrs, label: this.$attrs.label, - options: this.$attrs.options + options: this.$attrs.options, }; - } - } + }, + }, }; diff --git a/dashboard/src2/components/ActiveServersDialog.vue b/dashboard/src/components/ActiveServersDialog.vue similarity index 94% rename from dashboard/src2/components/ActiveServersDialog.vue rename to dashboard/src/components/ActiveServersDialog.vue index 3aa126884e9..8d3089bd9d1 100644 --- a/dashboard/src2/components/ActiveServersDialog.vue +++ b/dashboard/src/components/ActiveServersDialog.vue @@ -25,19 +25,19 @@ export default { name: 'ActiveServersDialog', data() { return { - showDialog: true + showDialog: true, }; }, resources: { activeServers: { url: 'press.api.account.active_servers', - auto: true - } + auto: true, + }, }, methods: { redirectToServer() { window.location = '/servers'; - } - } + }, + }, }; diff --git a/dashboard/src2/components/AddDomainDialog.vue b/dashboard/src/components/AddDomainDialog.vue similarity index 97% rename from dashboard/src2/components/AddDomainDialog.vue rename to dashboard/src/components/AddDomainDialog.vue index d593539d3db..84c94dc6988 100644 --- a/dashboard/src2/components/AddDomainDialog.vue +++ b/dashboard/src/components/AddDomainDialog.vue @@ -107,7 +107,7 @@ @click=" $resources.checkDNS.submit({ name: site.name, - domain: newDomain + domain: newDomain, }) " > @@ -121,7 +121,7 @@ @click=" $resources.addDomain.submit({ name: site.name, - domain: newDomain + domain: newDomain, }) " > @@ -138,14 +138,14 @@ export default { props: { site: { type: Object, - required: true - } + required: true, + }, }, emits: ['domainAdded'], data() { return { showDialog: true, - newDomain: null + newDomain: null, }; }, resources: { @@ -153,7 +153,7 @@ export default { url: 'press.api.site.check_dns', validate() { if (!this.newDomain) throw new DashboardError('Domain cannot be empty'); - } + }, }, addDomain: { url: 'press.api.site.add_domain', @@ -161,15 +161,15 @@ export default { this.$resources.checkDNS.reset(); this.$emit('domainAdded'); this.showDialog = false; - } + }, }, retryAddDomain: { url: 'press.api.site.retry_add_domain', onSuccess() { this.$emit('domainAdded'); // this.$resources.domains.fetch(); - } - } + }, + }, }, computed: { dnsVerified() { @@ -177,7 +177,7 @@ export default { }, dnsResult() { return this.$resources.checkDNS.data; - } - } + }, + }, }; diff --git a/dashboard/src2/components/AddTagDialog.vue b/dashboard/src/components/AddTagDialog.vue similarity index 85% rename from dashboard/src2/components/AddTagDialog.vue rename to dashboard/src/components/AddTagDialog.vue index c9257f1f5b6..d003a58f78f 100644 --- a/dashboard/src2/components/AddTagDialog.vue +++ b/dashboard/src/components/AddTagDialog.vue @@ -8,10 +8,10 @@ variant: 'solid', onClick: () => addNewTag( - selectedTag?.value === '__new__' ? newTag : selectedTag.value - ) - } - ] + selectedTag?.value === '__new__' ? newTag : selectedTag.value, + ), + }, + ], }" v-model="show" > @@ -28,7 +28,7 @@ v-model="newTag" label="Enter new tag and press enter" placeholder="production, staging, testing" - @keydown.enter="e => addNewTag(e.target.value)" + @keydown.enter="(e) => addNewTag(e.target.value)" /> @@ -38,7 +38,7 @@ import { Autocomplete, Dialog, FormControl, - getCachedDocumentResource + getCachedDocumentResource, } from 'frappe-ui'; export default { @@ -50,7 +50,7 @@ export default { return { selectedTag: null, newTag: '', - show: true + show: true, }; }, resources: { @@ -61,9 +61,9 @@ export default { filters: { doctype_name: this.doctype }, fields: ['tag'], pageLength: 1000, - auto: true + auto: true, }; - } + }, }, methods: { addNewTag(value) { @@ -74,18 +74,18 @@ export default { this.$emit('added', value); this.show = false; }); - } + }, }, computed: { tagOptions() { return [ { label: 'Create new tag', value: '__new__' }, - ...(this.$resources.existingTags.data || []).map(d => ({ + ...(this.$resources.existingTags.data || []).map((d) => ({ label: d.tag, - value: d.tag - })) + value: d.tag, + })), ]; - } - } + }, + }, }; diff --git a/dashboard/src2/components/AddressForm.vue b/dashboard/src/components/AddressForm.vue similarity index 83% rename from dashboard/src2/components/AddressForm.vue rename to dashboard/src/components/AddressForm.vue index fbd05815fd0..e291cb4ed64 100644 --- a/dashboard/src2/components/AddressForm.vue +++ b/dashboard/src/components/AddressForm.vue @@ -34,11 +34,11 @@ export default { props: ['address'], emits: ['update:address'], components: { - Form + Form, }, data() { return { - gstApplicable: false + gstApplicable: false, }; }, mounted() { @@ -56,12 +56,12 @@ export default { if (gstApplicable) { this.update( 'gstin', - this.address.gstin === 'Not Applicable' ? '' : this.address.gstin + this.address.gstin === 'Not Applicable' ? '' : this.address.gstin, ); } else { this.update('gstin', 'Not Applicable'); } - } + }, }, resources: { countryList: { @@ -70,35 +70,35 @@ export default { onSuccess() { let userCountry = this.$team?.doc.country; if (userCountry) { - let country = this.countryList.find(d => d.label === userCountry); + let country = this.countryList.find((d) => d.label === userCountry); if (country) { this.update('country', country.value); } } - } + }, }, validateGST() { return { url: 'press.api.billing.validate_gst', makeParams() { return { - address: this.address + address: this.address, }; - } + }, }; - } + }, }, methods: { update(key, value) { this.$emit('update:address', { ...this.address, - [key]: value + [key]: value, }); }, async validateGST() { this.update( 'gstin', - this.gstApplicable ? this.address.gstin : 'Not Applicable' + this.gstApplicable ? this.address.gstin : 'Not Applicable', ); await this.$resources.validateGST.submit(); }, @@ -107,8 +107,8 @@ export default { let is_india = country == 'India'; let values = this.fields .flat() - .filter(df => df.fieldname != 'gstin' || is_india) - .map(df => this.address[df.fieldname]); + .filter((df) => df.fieldname != 'gstin' || is_india) + .map((df) => this.address[df.fieldname]); if (!values.every(Boolean)) { throw new DashboardError('Please fill required values'); @@ -119,19 +119,19 @@ export default { } catch (error) { throw new DashboardError(error.messages?.join('\n')); } - } + }, }, computed: { countryList() { - return (this.$resources.countryList.data || []).map(d => ({ + return (this.$resources.countryList.data || []).map((d) => ({ label: d.name, - value: d.name + value: d.name, })); }, indianStates() { - return indianStates.map(d => ({ + return indianStates.map((d) => ({ label: d, - value: d + value: d, })); }, fields() { @@ -141,35 +141,35 @@ export default { label: 'Country', fieldname: 'country', options: this.countryList, - required: 1 + required: 1, }, { fieldtype: 'Data', label: 'Address', fieldname: 'address', - required: 1 + required: 1, }, { fieldtype: 'Data', label: 'City', fieldname: 'city', - required: 1 + required: 1, }, { fieldtype: this.address.country === 'India' ? 'Select' : 'Data', label: 'State / Province / Region', fieldname: 'state', required: 1, - options: this.address.country === 'India' ? this.indianStates : null + options: this.address.country === 'India' ? this.indianStates : null, }, { fieldtype: 'Data', label: 'Postal Code', fieldname: 'postal_code', - required: 1 - } + required: 1, + }, ]; - } - } + }, + }, }; diff --git a/dashboard/src2/components/AddressableErrorDialog.vue b/dashboard/src/components/AddressableErrorDialog.vue similarity index 95% rename from dashboard/src2/components/AddressableErrorDialog.vue rename to dashboard/src/components/AddressableErrorDialog.vue index ef538b6a859..69ab9cb7c84 100644 --- a/dashboard/src2/components/AddressableErrorDialog.vue +++ b/dashboard/src/components/AddressableErrorDialog.vue @@ -57,12 +57,12 @@ import { Button, Dialog, FeatherIcon, ErrorMessage } from 'frappe-ui'; export default { props: { - name: String + name: String, }, components: { Dialog, Button, - FeatherIcon + FeatherIcon, }, emits: ['done'], data() { @@ -70,7 +70,7 @@ export default { helpViewed: false, show: true, copied: false, - error: '' + error: '', }; }, resources: { @@ -80,15 +80,15 @@ export default { doctype: 'Press Notification', name: this.name, whitelistedMethods: { - markAsAddressed: 'mark_as_addressed' - } + markAsAddressed: 'mark_as_addressed', + }, }; - } + }, }, computed: { doc() { return this.$resources.notification.doc ?? null; - } + }, }, methods: { async copyTraceback() { @@ -111,7 +111,7 @@ export default { this.error = ''; this.helpViewed = true; window.open(this.doc.assistance_url, '_blank'); - } - } + }, + }, }; diff --git a/dashboard/src2/components/AlertAddPaymentMode.vue b/dashboard/src/components/AlertAddPaymentMode.vue similarity index 100% rename from dashboard/src2/components/AlertAddPaymentMode.vue rename to dashboard/src/components/AlertAddPaymentMode.vue diff --git a/dashboard/src2/components/AlertAddressDetails.vue b/dashboard/src/components/AlertAddressDetails.vue similarity index 94% rename from dashboard/src2/components/AlertAddressDetails.vue rename to dashboard/src/components/AlertAddressDetails.vue index 14bb9f53262..ff5e2b73278 100644 --- a/dashboard/src2/components/AlertAddressDetails.vue +++ b/dashboard/src/components/AlertAddressDetails.vue @@ -27,8 +27,8 @@ export default { components: { AlertBanner, UpdateBillingDetails }, data() { return { - showBillingDetailsDialog: false + showBillingDetailsDialog: false, }; - } + }, }; diff --git a/dashboard/src2/components/AlertAddressableError.vue b/dashboard/src/components/AlertAddressableError.vue similarity index 95% rename from dashboard/src2/components/AlertAddressableError.vue rename to dashboard/src/components/AlertAddressableError.vue index f3e78f09db8..d809110182e 100644 --- a/dashboard/src2/components/AlertAddressableError.vue +++ b/dashboard/src/components/AlertAddressableError.vue @@ -13,12 +13,12 @@ export default { emits: ['done'], props: { name: String, - title: String + title: String, }, methods: { show() { addressableErrorDialog(this.name, () => this.$emit('done')); - } - } + }, + }, }; diff --git a/dashboard/src2/components/AlertBanner.vue b/dashboard/src/components/AlertBanner.vue similarity index 71% rename from dashboard/src2/components/AlertBanner.vue rename to dashboard/src/components/AlertBanner.vue index f4708dfdcc2..80cd05afb34 100644 --- a/dashboard/src2/components/AlertBanner.vue +++ b/dashboard/src/components/AlertBanner.vue @@ -2,8 +2,12 @@
- +
diff --git a/dashboard/src/components/AlertBenchUpdate.vue b/dashboard/src/components/AlertBenchUpdate.vue deleted file mode 100644 index bab3415f809..00000000000 --- a/dashboard/src/components/AlertBenchUpdate.vue +++ /dev/null @@ -1,159 +0,0 @@ - - diff --git a/dashboard/src/components/AlertBillingInformation.vue b/dashboard/src/components/AlertBillingInformation.vue deleted file mode 100644 index e7c086c2d3c..00000000000 --- a/dashboard/src/components/AlertBillingInformation.vue +++ /dev/null @@ -1,65 +0,0 @@ - - diff --git a/dashboard/src2/components/AlertCardExpired.vue b/dashboard/src/components/AlertCardExpired.vue similarity index 91% rename from dashboard/src2/components/AlertCardExpired.vue rename to dashboard/src/components/AlertCardExpired.vue index 534e6c6a1ce..44aa25d3292 100644 --- a/dashboard/src2/components/AlertCardExpired.vue +++ b/dashboard/src/components/AlertCardExpired.vue @@ -13,6 +13,6 @@ import AlertBanner from './AlertBanner.vue'; export default { name: 'AlertCardExpired', - components: { AlertBanner } + components: { AlertBanner }, }; diff --git a/dashboard/src2/components/AlertMandateInfo.vue b/dashboard/src/components/AlertMandateInfo.vue similarity index 96% rename from dashboard/src2/components/AlertMandateInfo.vue rename to dashboard/src/components/AlertMandateInfo.vue index 0b2920987e1..59a6b41c0a1 100644 --- a/dashboard/src2/components/AlertMandateInfo.vue +++ b/dashboard/src/components/AlertMandateInfo.vue @@ -27,8 +27,8 @@ export default { components: { AlertBanner, StripeCardDialog }, data() { return { - showAddCardDialog: false + showAddCardDialog: false, }; - } + }, }; diff --git a/dashboard/src/components/AlertSiteActivation.vue b/dashboard/src/components/AlertSiteActivation.vue deleted file mode 100644 index 3fead84a42e..00000000000 --- a/dashboard/src/components/AlertSiteActivation.vue +++ /dev/null @@ -1,32 +0,0 @@ - - diff --git a/dashboard/src/components/AlertSiteUpdate.vue b/dashboard/src/components/AlertSiteUpdate.vue deleted file mode 100644 index ae82d5af3f0..00000000000 --- a/dashboard/src/components/AlertSiteUpdate.vue +++ /dev/null @@ -1,165 +0,0 @@ - - diff --git a/dashboard/src2/components/AlertUnpaidInvoices.vue b/dashboard/src/components/AlertUnpaidInvoices.vue similarity index 89% rename from dashboard/src2/components/AlertUnpaidInvoices.vue rename to dashboard/src/components/AlertUnpaidInvoices.vue index fcd6bff4122..a51268b23d7 100644 --- a/dashboard/src2/components/AlertUnpaidInvoices.vue +++ b/dashboard/src/components/AlertUnpaidInvoices.vue @@ -14,18 +14,18 @@ export default { props: { amount: { type: Number, - required: true + required: true, }, currency: { - type: String - } + type: String, + }, }, computed: { outstandingBalanceMessage() { return `Your account currently has an outstanding balance of ${this.$format.userCurrency( - this.amount + this.amount, )}. Please settle the balance to avoid any site suspension.`; - } - } + }, + }, }; diff --git a/dashboard/src/components/AlertUpdate.vue b/dashboard/src/components/AlertUpdate.vue deleted file mode 100644 index 081587bcec4..00000000000 --- a/dashboard/src/components/AlertUpdate.vue +++ /dev/null @@ -1,172 +0,0 @@ - - diff --git a/dashboard/src/components/AppPlanCard.vue b/dashboard/src/components/AppPlanCard.vue deleted file mode 100644 index ecdabaf359d..00000000000 --- a/dashboard/src/components/AppPlanCard.vue +++ /dev/null @@ -1,98 +0,0 @@ - - - diff --git a/dashboard/src2/components/AppSidebar.vue b/dashboard/src/components/AppSidebar.vue similarity index 89% rename from dashboard/src2/components/AppSidebar.vue rename to dashboard/src/components/AppSidebar.vue index 72665c3c0a6..620f9ea7d2e 100644 --- a/dashboard/src2/components/AppSidebar.vue +++ b/dashboard/src/components/AppSidebar.vue @@ -10,23 +10,23 @@ icon: 'command', condition: () => $team?.doc?.valid_teams?.length > 1 || $team?.doc?.is_desk_user, - onClick: () => (showTeamSwitcher = true) + onClick: () => (showTeamSwitcher = true), }, { label: 'Support & Docs', icon: 'help-circle', - onClick: support + onClick: support, }, { label: 'Share Feedback', icon: 'file-text', - onClick: feedback + onClick: feedback, }, { label: 'Logout', icon: 'log-out', - onClick: $session.logout.submit - } + onClick: $session.logout.submit, + }, ]" >