diff --git a/.github/ISSUE_TEMPLATE/bug-report.yml b/.github/ISSUE_TEMPLATE/bug-report.yml new file mode 100644 index 00000000..ff6a0a9e --- /dev/null +++ b/.github/ISSUE_TEMPLATE/bug-report.yml @@ -0,0 +1,58 @@ +name: Bug Report +description: Found something you weren't expecting? Report it here! +labels: kind/bug +body: + - type: markdown + attributes: + value: | + NOTE: If your issue is a security concern, please send an email to security@vikunja.io instead of opening a public issue. + - type: markdown + attributes: + value: | + Please fill out this issue template to report a bug. + + 1. If you want to propose a new feature, please open a discussion thread in the forum: https://community.vikunja.io + 2. Please ask questions or configuration/deploy problems on our [Matrix Room](https://matrix.to/#/#vikunja:matrix.org) or forum (https://community.vikunja.io). + 3. Make sure you are using the latest release and + take a moment to check that your issue hasn't been reported before. + 4. Please give all relevant information below for bug reports, because + incomplete details will be handled as an invalid report and closed. + - type: textarea + id: description + attributes: + label: Description + description: | + Please provide a description of your issue here, with a URL if you were able to reproduce the issue (see below). + - type: input + id: frontend-version + attributes: + label: Vikunja Frontend Version + description: Vikunja frontend version (or commit reference) of your instance + validations: + required: true + - type: input + id: api-version + attributes: + label: Vikunja API Version + description: Vikunja API version (or commit reference) of your instance + validations: + required: true + - type: input + id: browser-version + attributes: + label: Browser and version + description: If your issue is related to a frontend problem, please provide the browser and version you used to reproduce it. + - type: dropdown + id: can-reproduce + attributes: + label: Can you reproduce the bug on the Vikunja demo site? + options: + - "Yes" + - "No" + validations: + required: true + - type: textarea + id: screenshots + attributes: + label: Screenshots + description: If this issue involves the Web Interface, please provide one or more screenshots diff --git a/.github/ISSUE_TEMPLATE/config.yml b/.github/ISSUE_TEMPLATE/config.yml new file mode 100644 index 00000000..4a2256d7 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/config.yml @@ -0,0 +1,17 @@ +blank_issues_enabled: false +contact_links: + - name: API issues + url: https://code.vikunja.io/api/issues + about: This is the frontend repo. Please open api-related bug reports and discussions in the api 0repo. Not sure if your issue is frontend or api? Ask in Matrix or the forum first. + - name: Forum + url: https://community.vikunja.io/ + about: Feature Requests, Questions, configuration or deployment problems should be discussed in the forum. + - name: Security-related issues + url: https://vikunja.io/contact/#security + about: For security concerns, please send a mail to security@vikunja.io instead of opening a public issue. + - name: Chat on Matrix + url: https://matrix.to/#/#vikunja:matrix.org + about: Please ask any quick questions here. + - name: Translations + url: https://crowdin.com/project/vikunja + about: Any problems or requests for new languages about translations should be handled in crowdin. diff --git a/Dockerfile b/Dockerfile index bc702b12..a12177e5 100644 --- a/Dockerfile +++ b/Dockerfile @@ -6,34 +6,24 @@ WORKDIR /build ARG USE_RELEASE=false ARG RELEASE_VERSION=main +ENV PNPM_CACHE_FOLDER .cache/pnpm/ +ADD . ./ + RUN \ if [ $USE_RELEASE = true ]; then \ wget https://dl.vikunja.io/frontend/vikunja-frontend-$RELEASE_VERSION.zip -O frontend-release.zip && \ unzip frontend-release.zip -d dist/ && \ exit 0; \ - fi - -ENV PNPM_CACHE_FOLDER .cache/pnpm/ - -# pnpm fetch does require only lockfile -COPY pnpm-lock.yaml ./ - -RUN \ + fi && \ # https://pnpm.io/installation#using-corepack corepack enable && \ - # we don't use corepack prepare here by intend since - # we have renovate to keep our dependencies up to date + # we don't use corepack prepare here by intend since + # we have renovate to keep our dependencies up to date # Build the frontend - pnpm fetch --prod - -ADD . ./ - -RUN apk add --no-cache git - -RUN \ - pnpm install -r --offline --prod && \ - echo '{"VERSION": "'$(git describe --tags --always --abbrev=10 | sed 's/-/+/' | sed 's/^v//' | sed 's/-g/-/')'"}' > src/version.json && \ - pnpm run build + pnpm install && \ + apk add --no-cache git && \ + echo '{"VERSION": "'$(git describe --tags --always --abbrev=10 | sed 's/-/+/' | sed 's/^v//' | sed 's/-g/-/')'"}' > src/version.json && \ + pnpm run build # Stage 2: copy FROM nginx:alpine diff --git a/cypress/e2e/list/list-view-gantt.spec.ts b/cypress/e2e/list/list-view-gantt.spec.ts index c2a501c9..d2bdb1f5 100644 --- a/cypress/e2e/list/list-view-gantt.spec.ts +++ b/cypress/e2e/list/list-view-gantt.spec.ts @@ -6,7 +6,7 @@ import '../../support/authenticateUser' describe('List View Gantt', () => { prepareLists() - + it('Hides tasks with no dates', () => { const tasks = TaskFactory.create(1) cy.visit('/lists/1/gantt') @@ -16,10 +16,12 @@ describe('List View Gantt', () => { }) it('Shows tasks from the current and next month', () => { - const now = new Date() - const nextMonth = now + const now = Date.UTC(2022, 8, 25) + cy.clock(now, ['Date']) + + const nextMonth = new Date(now) nextMonth.setDate(1) - nextMonth.setMonth(now.getMonth() + 1) + nextMonth.setMonth(9) cy.visit('/lists/1/gantt') @@ -32,7 +34,7 @@ describe('List View Gantt', () => { const now = new Date() const tasks = TaskFactory.create(1, { start_date: formatISO(now), - end_date: formatISO(now.setDate(now.getDate() + 4)) + end_date: formatISO(now.setDate(now.getDate() + 4)), }) cy.visit('/lists/1/gantt') @@ -64,7 +66,7 @@ describe('List View Gantt', () => { const now = new Date() TaskFactory.create(1, { start_date: formatISO(now), - end_date: formatISO(now.setDate(now.getDate() + 4)) + end_date: formatISO(now.setDate(now.getDate() + 4)), }) cy.visit('/lists/1/gantt') diff --git a/package.json b/package.json index 13185305..0797faae 100644 --- a/package.json +++ b/package.json @@ -46,7 +46,7 @@ "is-touch-device": "1.0.1", "lodash.clonedeep": "4.5.0", "lodash.debounce": "4.0.8", - "marked": "4.1.0", + "marked": "4.1.1", "minimist": "1.2.6", "pinia": "2.0.22", "register-service-worker": "1.7.2", @@ -59,7 +59,6 @@ "vue-flatpickr-component": "9.0.6", "vue-i18n": "9.2.2", "vue-router": "4.1.5", - "vuex": "4.0.2", "workbox-precaching": "6.5.4", "zhyswan-vuedraggable": "4.1.3" }, diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 077a3584..8596a7e4 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -52,7 +52,7 @@ specifiers: is-touch-device: 1.0.1 lodash.clonedeep: 4.5.0 lodash.debounce: 4.0.8 - marked: 4.1.0 + marked: 4.1.1 minimist: 1.2.6 netlify-cli: 11.8.3 pinia: 2.0.22 @@ -77,7 +77,6 @@ specifiers: vue-i18n: 9.2.2 vue-router: 4.1.5 vue-tsc: 0.40.13 - vuex: 4.0.2 wait-on: 6.0.1 workbox-cli: 6.5.4 workbox-precaching: 6.5.4 @@ -112,7 +111,7 @@ dependencies: is-touch-device: 1.0.1 lodash.clonedeep: 4.5.0 lodash.debounce: 4.0.8 - marked: 4.1.0 + marked: 4.1.1 minimist: 1.2.6 pinia: 2.0.22_bfjwoga25wxjazzogo7o372nwq register-service-worker: 1.7.2 @@ -125,7 +124,6 @@ dependencies: vue-flatpickr-component: 9.0.6_vue@3.2.40 vue-i18n: 9.2.2_vue@3.2.40 vue-router: 4.1.5_vue@3.2.40 - vuex: 4.0.2_vue@3.2.40 workbox-precaching: 6.5.4 zhyswan-vuedraggable: 4.1.3_vue@3.2.40 @@ -5727,7 +5725,7 @@ packages: '@types/marked': 4.0.7 codemirror: 5.65.9 codemirror-spell-checker: 1.1.2 - marked: 4.1.0 + marked: 4.1.1 dev: false /ecc-jsbn/0.1.2: @@ -8858,8 +8856,8 @@ packages: object-visit: 1.0.1 dev: true - /marked/4.1.0: - resolution: {integrity: sha512-+Z6KDjSPa6/723PQYyc1axYZpYYpDnECDaU6hkaf5gqBieBkMKYReL5hteF2QizhlMbgbo8umXl/clZ67+GlsA==} + /marked/4.1.1: + resolution: {integrity: sha512-0cNMnTcUJPxbA6uWmCmjWz4NJRe/0Xfk2NhXCUHjew9qJzFN20krFnsUe7QynwqOwa5m1fZ4UDg0ycKFVC0ccw==} engines: {node: '>= 12'} hasBin: true dev: false @@ -12768,15 +12766,6 @@ packages: '@vue/server-renderer': 3.2.40_vue@3.2.40 '@vue/shared': 3.2.40 - /vuex/4.0.2_vue@3.2.40: - resolution: {integrity: sha512-M6r8uxELjZIK8kTKDGgZTYX/ahzblnzC4isU1tpmEuOIIKmV+TRdc+H4s8ds2NuZ7wpUTdGRzJRtoj+lI+pc0Q==} - peerDependencies: - vue: ^3.0.2 - dependencies: - '@vue/devtools-api': 6.2.1 - vue: 3.2.40 - dev: false - /wait-on/6.0.1: resolution: {integrity: sha512-zht+KASY3usTY5u2LgaNqn/Cd8MukxLGjdcZxT2ns5QzDmTFc4XoWBgC+C/na+sMRZTuVygQoMYwdcVjHnYIVw==} engines: {node: '>=10.0.0'} diff --git a/src/App.vue b/src/App.vue index 81fcf611..abfce27d 100644 --- a/src/App.vue +++ b/src/App.vue @@ -18,7 +18,6 @@ import {computed, watch, type Ref} from 'vue' import {useRouter} from 'vue-router' import {useRouteQuery} from '@vueuse/router' -import {useStore} from '@/store' import {useI18n} from 'vue-i18n' import isTouchDevice from 'is-touch-device' import {success} from '@/message' @@ -34,16 +33,17 @@ import Ready from '@/components/misc/ready.vue' import {setLanguage} from './i18n' import AccountDeleteService from '@/services/accountDelete' +import {useBaseStore} from '@/stores/base' import {useColorScheme} from '@/composables/useColorScheme' import {useBodyClass} from '@/composables/useBodyClass' import {useAuthStore} from './stores/auth' -const store = useStore() +const baseStore = useBaseStore() const authStore = useAuthStore() const router = useRouter() useBodyClass('is-touch', isTouchDevice()) -const keyboardShortcutsActive = computed(() => store.state.keyboardShortcutsActive) +const keyboardShortcutsActive = computed(() => baseStore.keyboardShortcutsActive) const authUser = computed(() => authStore.authUser) const authLinkShare = computed(() => authStore.authLinkShare) diff --git a/src/components/home/MenuButton.vue b/src/components/home/MenuButton.vue index 49a25286..40077000 100644 --- a/src/components/home/MenuButton.vue +++ b/src/components/home/MenuButton.vue @@ -1,8 +1,8 @@