feat(gantt): trying to load gantt-chart
This commit is contained in:
parent
df02dd5291
commit
e968c88cfd
312
pnpm-lock.yaml
generated
312
pnpm-lock.yaml
generated
@ -71,17 +71,17 @@ specifiers:
|
||||
sortablejs: 1.15.0
|
||||
typescript: 4.8.4
|
||||
ufo: 0.8.5
|
||||
vite: 3.1.4
|
||||
vite: 3.1.8
|
||||
vite-plugin-pwa: 0.13.1
|
||||
vite-svg-loader: 3.6.0
|
||||
vitest: 0.23.4
|
||||
vue: 3.2.40
|
||||
vue: 3.2.41
|
||||
vue-advanced-cropper: 2.8.6
|
||||
vue-drag-resize: 2.0.3
|
||||
vue-flatpickr-component: 9.0.6
|
||||
vue-flatpickr-component: 9.0.8
|
||||
vue-i18n: 9.2.2
|
||||
vue-router: 4.1.5
|
||||
vue-tsc: 1.0.2
|
||||
vue-tsc: 1.0.8
|
||||
wait-on: 6.0.1
|
||||
workbox-cli: 6.5.4
|
||||
workbox-precaching: 6.5.4
|
||||
@ -91,17 +91,17 @@ dependencies:
|
||||
'@fortawesome/fontawesome-svg-core': 6.2.0
|
||||
'@fortawesome/free-regular-svg-icons': 6.2.0
|
||||
'@fortawesome/free-solid-svg-icons': 6.2.0
|
||||
'@fortawesome/vue-fontawesome': 3.0.1_ehtls4nlds6e63ahmro7mfqbhy
|
||||
'@fortawesome/vue-fontawesome': 3.0.1_lteq7vqmz6gtgcgatkvrcm56su
|
||||
'@github/hotkey': 2.0.1
|
||||
'@infectoone/vue-ganttastic': file:vendor/infectoone-vue-ganttastic-2.1.1.tgz_dayjs@1.11.5+vue@3.2.40
|
||||
'@kyvg/vue3-notification': 2.4.1_vue@3.2.40
|
||||
'@infectoone/vue-ganttastic': file:vendor/infectoone-vue-ganttastic-2.1.1.tgz_dayjs@1.11.5+vue@3.2.41
|
||||
'@kyvg/vue3-notification': 2.4.1_vue@3.2.41
|
||||
'@sentry/tracing': 7.14.1
|
||||
'@sentry/vue': 7.14.1_vue@3.2.40
|
||||
'@sentry/vue': 7.14.1_vue@3.2.41
|
||||
'@types/is-touch-device': 1.0.0
|
||||
'@types/lodash.clonedeep': 4.5.7
|
||||
'@types/sortablejs': 1.15.0
|
||||
'@vueuse/core': 9.3.0_vue@3.2.40
|
||||
'@vueuse/router': 9.3.0_c7eza3xvlyb4mo6qeit5ggeo6u
|
||||
'@vueuse/core': 9.3.0_vue@3.2.41
|
||||
'@vueuse/router': 9.3.0_4g567gsol3fv3jos66rjdswwp4
|
||||
axios: 0.27.2
|
||||
blurhash: 2.0.3
|
||||
bulma-css-variables: 0.9.33
|
||||
@ -113,31 +113,31 @@ dependencies:
|
||||
easymde: 2.18.0
|
||||
flatpickr: 4.6.13
|
||||
flexsearch: 0.7.21
|
||||
floating-vue: 2.0.0-beta.20_vue@3.2.40
|
||||
floating-vue: 2.0.0-beta.20_vue@3.2.41
|
||||
highlight.js: 11.6.0
|
||||
is-touch-device: 1.0.1
|
||||
lodash.clonedeep: 4.5.0
|
||||
lodash.debounce: 4.0.8
|
||||
marked: 4.1.1
|
||||
minimist: 1.2.6
|
||||
pinia: 2.0.22_bfjwoga25wxjazzogo7o372nwq
|
||||
pinia: 2.0.22_l7r24p6nevbtlimqmqcwa3ouhu
|
||||
register-service-worker: 1.7.2
|
||||
snake-case: 3.0.4
|
||||
sortablejs: 1.15.0
|
||||
ufo: 0.8.5
|
||||
vue: 3.2.40
|
||||
vue-advanced-cropper: 2.8.6_vue@3.2.40
|
||||
vue: 3.2.41
|
||||
vue-advanced-cropper: 2.8.6_vue@3.2.41
|
||||
vue-drag-resize: 2.0.3
|
||||
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
|
||||
vue-flatpickr-component: 9.0.8_vue@3.2.41
|
||||
vue-i18n: 9.2.2_vue@3.2.41
|
||||
vue-router: 4.1.5_vue@3.2.41
|
||||
workbox-precaching: 6.5.4
|
||||
zhyswan-vuedraggable: 4.1.3_vue@3.2.40
|
||||
zhyswan-vuedraggable: 4.1.3_vue@3.2.41
|
||||
|
||||
devDependencies:
|
||||
'@4tw/cypress-drag-drop': 2.2.1_cypress@10.9.0
|
||||
'@cypress/vite-dev-server': 3.2.0
|
||||
'@cypress/vue': 4.2.0_cypress@10.9.0+vue@3.2.40
|
||||
'@cypress/vue': 4.2.0_cypress@10.9.0+vue@3.2.41
|
||||
'@faker-js/faker': 7.5.0
|
||||
'@rushstack/eslint-patch': 1.2.0
|
||||
'@types/dompurify': 2.3.4
|
||||
@ -147,10 +147,10 @@ devDependencies:
|
||||
'@types/node': 16.11.64
|
||||
'@typescript-eslint/eslint-plugin': 5.39.0_xyciw6oqjoiiono4dhv3uhn5my
|
||||
'@typescript-eslint/parser': 5.39.0_ypn2ylkkyfa5i233caldtndbqa
|
||||
'@vitejs/plugin-legacy': 2.2.0_terser@5.15.1+vite@3.1.4
|
||||
'@vitejs/plugin-vue': 3.1.2_vite@3.1.4+vue@3.2.40
|
||||
'@vitejs/plugin-legacy': 2.2.0_terser@5.15.1+vite@3.1.8
|
||||
'@vitejs/plugin-vue': 3.1.2_vite@3.1.8+vue@3.2.41
|
||||
'@vue/eslint-config-typescript': 11.0.2_vnnms2vwgxhb7jv3u2ncwd7xzm
|
||||
'@vue/test-utils': 2.1.0_vue@3.2.40
|
||||
'@vue/test-utils': 2.1.0_vue@3.2.41
|
||||
'@vue/tsconfig': 0.1.3_@types+node@16.11.64
|
||||
autoprefixer: 10.4.12_postcss@8.4.17
|
||||
browserslist: 4.21.4
|
||||
@ -168,11 +168,11 @@ devDependencies:
|
||||
rollup-plugin-visualizer: 5.8.2_rollup@2.79.1
|
||||
sass: 1.55.0
|
||||
typescript: 4.8.4
|
||||
vite: 3.1.4_sass@1.55.0+terser@5.15.1
|
||||
vite-plugin-pwa: 0.13.1_bhe5iaipiq3lmbaxwdxgnnn2gq
|
||||
vite: 3.1.8_sass@1.55.0+terser@5.15.1
|
||||
vite-plugin-pwa: 0.13.1_2txo4viysstjrz5b6oxcrxybay
|
||||
vite-svg-loader: 3.6.0
|
||||
vitest: 0.23.4_k3tqzgv3vrnpmbq3o6ks4hg4vi
|
||||
vue-tsc: 1.0.2_typescript@4.8.4
|
||||
vue-tsc: 1.0.8_typescript@4.8.4
|
||||
wait-on: 6.0.1
|
||||
workbox-cli: 6.5.4
|
||||
|
||||
@ -1600,7 +1600,7 @@ packages:
|
||||
- supports-color
|
||||
dev: true
|
||||
|
||||
/@cypress/vue/4.2.0_cypress@10.9.0+vue@3.2.40:
|
||||
/@cypress/vue/4.2.0_cypress@10.9.0+vue@3.2.41:
|
||||
resolution: {integrity: sha512-a+5TCBMwng+UUcFSWxzdJ+Wsvtu+XltUKBQCvidysVvPkPF/c/Z+Geyl+sX7tasKT8KIOW9pI90PIwxzQvQh7A==}
|
||||
engines: {node: '>=8'}
|
||||
peerDependencies:
|
||||
@ -1612,7 +1612,7 @@ packages:
|
||||
optional: true
|
||||
dependencies:
|
||||
cypress: 10.9.0
|
||||
vue: 3.2.40
|
||||
vue: 3.2.41
|
||||
dev: true
|
||||
|
||||
/@cypress/xvfb/1.2.4_supports-color@8.1.1:
|
||||
@ -1712,14 +1712,14 @@ packages:
|
||||
'@fortawesome/fontawesome-common-types': 6.2.0
|
||||
dev: false
|
||||
|
||||
/@fortawesome/vue-fontawesome/3.0.1_ehtls4nlds6e63ahmro7mfqbhy:
|
||||
/@fortawesome/vue-fontawesome/3.0.1_lteq7vqmz6gtgcgatkvrcm56su:
|
||||
resolution: {integrity: sha512-CdXZJoCS+aEPec26ZP7hWWU3SaJlQPZSCGdgpQ2qGl2HUmtUUNrI3zC4XWdn1JUmh3t5OuDeRG1qB4eGRNSD4A==}
|
||||
peerDependencies:
|
||||
'@fortawesome/fontawesome-svg-core': ~1 || ~6
|
||||
vue: '>= 3.0.0 < 4'
|
||||
dependencies:
|
||||
'@fortawesome/fontawesome-svg-core': 6.2.0
|
||||
vue: 3.2.40
|
||||
vue: 3.2.41
|
||||
dev: false
|
||||
|
||||
/@github/hotkey/2.0.1:
|
||||
@ -1875,12 +1875,12 @@ packages:
|
||||
'@jridgewell/sourcemap-codec': 1.4.14
|
||||
dev: true
|
||||
|
||||
/@kyvg/vue3-notification/2.4.1_vue@3.2.40:
|
||||
/@kyvg/vue3-notification/2.4.1_vue@3.2.41:
|
||||
resolution: {integrity: sha512-SYwnGsTTKJ2TwFQ60hgYHEvuhkLscrnqSGPvdFRRiOwUb1sULJAPl5s+h+EEjan24kbizBtsxLTPC1D1qLs1EA==}
|
||||
peerDependencies:
|
||||
vue: ^3.0.0
|
||||
dependencies:
|
||||
vue: 3.2.40
|
||||
vue: 3.2.41
|
||||
dev: false
|
||||
|
||||
/@mapbox/node-pre-gyp/1.0.10:
|
||||
@ -2798,7 +2798,7 @@ packages:
|
||||
tslib: 1.14.1
|
||||
dev: false
|
||||
|
||||
/@sentry/vue/7.14.1_vue@3.2.40:
|
||||
/@sentry/vue/7.14.1_vue@3.2.41:
|
||||
resolution: {integrity: sha512-6iGzaWUDu4wbuc4RbAaQv4GhMpz/qVcujl72updvsCsLNWl/xa0bAbsy4wtYvafCt/IXEBot6J4RnDe4mNLL2A==}
|
||||
engines: {node: '>=8'}
|
||||
peerDependencies:
|
||||
@ -2809,7 +2809,7 @@ packages:
|
||||
'@sentry/types': 7.14.1
|
||||
'@sentry/utils': 7.14.1
|
||||
tslib: 1.14.1
|
||||
vue: 3.2.40
|
||||
vue: 3.2.41
|
||||
dev: false
|
||||
|
||||
/@sideway/address/4.1.4:
|
||||
@ -3360,7 +3360,7 @@ packages:
|
||||
- supports-color
|
||||
dev: true
|
||||
|
||||
/@vitejs/plugin-legacy/2.2.0_terser@5.15.1+vite@3.1.4:
|
||||
/@vitejs/plugin-legacy/2.2.0_terser@5.15.1+vite@3.1.8:
|
||||
resolution: {integrity: sha512-xkSXZl2LNk0KKyo5CJknNW84mSlmHIClFzsBuFXkX3yBt+Lr8UO/n4QOg2X7+jvurgBRies9FRn3ZvMem+TmIg==}
|
||||
engines: {node: ^14.18.0 || >=16.0.0}
|
||||
peerDependencies:
|
||||
@ -3373,58 +3373,58 @@ packages:
|
||||
regenerator-runtime: 0.13.9
|
||||
systemjs: 6.13.0
|
||||
terser: 5.15.1
|
||||
vite: 3.1.4_sass@1.55.0+terser@5.15.1
|
||||
vite: 3.1.8_sass@1.55.0+terser@5.15.1
|
||||
dev: true
|
||||
|
||||
/@vitejs/plugin-vue/3.1.2_vite@3.1.4+vue@3.2.40:
|
||||
/@vitejs/plugin-vue/3.1.2_vite@3.1.8+vue@3.2.41:
|
||||
resolution: {integrity: sha512-3zxKNlvA3oNaKDYX0NBclgxTQ1xaFdL7PzwF6zj9tGFziKwmBa3Q/6XcJQxudlT81WxDjEhHmevvIC4Orc1LhQ==}
|
||||
engines: {node: ^14.18.0 || >=16.0.0}
|
||||
peerDependencies:
|
||||
vite: ^3.0.0
|
||||
vue: ^3.2.25
|
||||
dependencies:
|
||||
vite: 3.1.4_sass@1.55.0+terser@5.15.1
|
||||
vue: 3.2.40
|
||||
vite: 3.1.8_sass@1.55.0+terser@5.15.1
|
||||
vue: 3.2.41
|
||||
dev: true
|
||||
|
||||
/@volar/language-core/1.0.2:
|
||||
resolution: {integrity: sha512-kNzrnZYxNWcIgU8b1Yzm4pDb4fEM/LNicWLyVOxaNRvemU5Sh4ORDzKihI5AkzGGkvy0F/67xVe7/5/o9U1oPg==}
|
||||
/@volar/language-core/1.0.8:
|
||||
resolution: {integrity: sha512-uxYSOqBk8ZFSzGjUIPOBEFPOg8F3CE6cLO5meK95DODGIlUlPytGiy9sy8QZ9w7RpUH4XMOX3MH/G48SLgP07A==}
|
||||
dependencies:
|
||||
'@volar/source-map': 1.0.2
|
||||
'@vue/reactivity': 3.2.40
|
||||
'@volar/source-map': 1.0.8
|
||||
'@vue/reactivity': 3.2.41
|
||||
muggle-string: 0.1.0
|
||||
dev: true
|
||||
|
||||
/@volar/source-map/1.0.2:
|
||||
resolution: {integrity: sha512-MizyyDw+Eg704bSVkS/8MeP7G4t5U4ZmaXdA2SW3cYAncQKn10P2r6eSyI/8vno+y8wgpM3k9aRfineXB1fMkQ==}
|
||||
/@volar/source-map/1.0.8:
|
||||
resolution: {integrity: sha512-uKMe+alyfl1Abs5SviKejFoe7x9g6jDPVpVt63Tet4qn1Ziy7tFsvtCpM2Y1Ko5qw2nLIeloLslPqm9/gmbBLQ==}
|
||||
dependencies:
|
||||
muggle-string: 0.1.0
|
||||
dev: true
|
||||
|
||||
/@volar/typescript/1.0.2:
|
||||
resolution: {integrity: sha512-yQ6ze+gmf+jYTT/Y+IIH9cBE2YF3I92N6vGfdrVgwnDOj1jnulvJ5viwdTYcAIeEQRB0qtwYfRpSHOrGG2FL2w==}
|
||||
/@volar/typescript/1.0.8:
|
||||
resolution: {integrity: sha512-2oY1Apvzcs/5tAn7p1tRlDxNgal5ezaK0h9cutcWALeimsaQBAEE2NAirCrLMHl8DneuDce0tzJqHaQeHw9RmQ==}
|
||||
dependencies:
|
||||
'@volar/language-core': 1.0.2
|
||||
'@volar/language-core': 1.0.8
|
||||
dev: true
|
||||
|
||||
/@volar/vue-language-core/1.0.2:
|
||||
resolution: {integrity: sha512-SiFHeXu0yWl9N+sIrvQ+iIh/P2oMCBkUT6XFhhh6RCY01KNKc7/iO/xB/OJlO9yl/6mAiFwIVdtPcp6GNOkb3g==}
|
||||
/@volar/vue-language-core/1.0.8:
|
||||
resolution: {integrity: sha512-cXb7oTybxcm1vpz003agdYQHyxij7UAaSub60d7W1aMWpqb2iaCbVaq9izgQFlrpC4/JnVs+cJPb/Q6fAUVxBg==}
|
||||
dependencies:
|
||||
'@volar/language-core': 1.0.2
|
||||
'@volar/source-map': 1.0.2
|
||||
'@vue/compiler-dom': 3.2.40
|
||||
'@vue/compiler-sfc': 3.2.40
|
||||
'@volar/language-core': 1.0.8
|
||||
'@volar/source-map': 1.0.8
|
||||
'@vue/compiler-dom': 3.2.41
|
||||
'@vue/compiler-sfc': 3.2.41
|
||||
'@vue/reactivity': 3.2.40
|
||||
'@vue/shared': 3.2.40
|
||||
'@vue/shared': 3.2.41
|
||||
minimatch: 5.1.0
|
||||
vue-template-compiler: 2.7.10
|
||||
dev: true
|
||||
|
||||
/@volar/vue-typescript/1.0.2:
|
||||
resolution: {integrity: sha512-wOUebVHS8ENF0uMGvFdnkjVdVnf80SHUKbCoCkgngxeVFQBvAlEShcm/XT8bSX3QKoNPl1ZGqYN4UQRgZFyaow==}
|
||||
/@volar/vue-typescript/1.0.8:
|
||||
resolution: {integrity: sha512-6jBvA7iwBkRqS2VQx2gLJgfLcF3hcODyJ6Lmiw2tN8D/LVfFCovvzJgPvIQb9Y4i+rha1Y0cpsYOUt9XW2Z7ZA==}
|
||||
dependencies:
|
||||
'@volar/typescript': 1.0.2
|
||||
'@volar/vue-language-core': 1.0.2
|
||||
'@volar/typescript': 1.0.8
|
||||
'@volar/vue-language-core': 1.0.8
|
||||
dev: true
|
||||
|
||||
/@vue/compiler-core/3.2.40:
|
||||
@ -3434,12 +3434,28 @@ packages:
|
||||
'@vue/shared': 3.2.40
|
||||
estree-walker: 2.0.2
|
||||
source-map: 0.6.1
|
||||
dev: true
|
||||
|
||||
/@vue/compiler-core/3.2.41:
|
||||
resolution: {integrity: sha512-oA4mH6SA78DT+96/nsi4p9DX97PHcNROxs51lYk7gb9Z4BPKQ3Mh+BLn6CQZBw857Iuhu28BfMSRHAlPvD4vlw==}
|
||||
dependencies:
|
||||
'@babel/parser': 7.19.3
|
||||
'@vue/shared': 3.2.41
|
||||
estree-walker: 2.0.2
|
||||
source-map: 0.6.1
|
||||
|
||||
/@vue/compiler-dom/3.2.40:
|
||||
resolution: {integrity: sha512-OZCNyYVC2LQJy4H7h0o28rtk+4v+HMQygRTpmibGoG9wZyomQiS5otU7qo3Wlq5UfHDw2RFwxb9BJgKjVpjrQw==}
|
||||
dependencies:
|
||||
'@vue/compiler-core': 3.2.40
|
||||
'@vue/shared': 3.2.40
|
||||
dev: true
|
||||
|
||||
/@vue/compiler-dom/3.2.41:
|
||||
resolution: {integrity: sha512-xe5TbbIsonjENxJsYRbDJvthzqxLNk+tb3d/c47zgREDa/PCp6/Y4gC/skM4H6PIuX5DAxm7fFJdbjjUH2QTMw==}
|
||||
dependencies:
|
||||
'@vue/compiler-core': 3.2.41
|
||||
'@vue/shared': 3.2.41
|
||||
|
||||
/@vue/compiler-sfc/3.2.40:
|
||||
resolution: {integrity: sha512-tzqwniIN1fu1PDHC3CpqY/dPCfN/RN1thpBC+g69kJcrl7mbGiHKNwbA6kJ3XKKy8R6JLKqcpVugqN4HkeBFFg==}
|
||||
@ -3454,12 +3470,34 @@ packages:
|
||||
magic-string: 0.25.9
|
||||
postcss: 8.4.17
|
||||
source-map: 0.6.1
|
||||
dev: true
|
||||
|
||||
/@vue/compiler-sfc/3.2.41:
|
||||
resolution: {integrity: sha512-+1P2m5kxOeaxVmJNXnBskAn3BenbTmbxBxWOtBq3mQTCokIreuMULFantBUclP0+KnzNCMOvcnKinqQZmiOF8w==}
|
||||
dependencies:
|
||||
'@babel/parser': 7.19.3
|
||||
'@vue/compiler-core': 3.2.41
|
||||
'@vue/compiler-dom': 3.2.41
|
||||
'@vue/compiler-ssr': 3.2.41
|
||||
'@vue/reactivity-transform': 3.2.41
|
||||
'@vue/shared': 3.2.41
|
||||
estree-walker: 2.0.2
|
||||
magic-string: 0.25.9
|
||||
postcss: 8.4.17
|
||||
source-map: 0.6.1
|
||||
|
||||
/@vue/compiler-ssr/3.2.40:
|
||||
resolution: {integrity: sha512-80cQcgasKjrPPuKcxwuCx7feq+wC6oFl5YaKSee9pV3DNq+6fmCVwEEC3vvkf/E2aI76rIJSOYHsWSEIxK74oQ==}
|
||||
dependencies:
|
||||
'@vue/compiler-dom': 3.2.40
|
||||
'@vue/shared': 3.2.40
|
||||
dev: true
|
||||
|
||||
/@vue/compiler-ssr/3.2.41:
|
||||
resolution: {integrity: sha512-Y5wPiNIiaMz/sps8+DmhaKfDm1xgj6GrH99z4gq2LQenfVQcYXmHIOBcs5qPwl7jaW3SUQWjkAPKMfQemEQZwQ==}
|
||||
dependencies:
|
||||
'@vue/compiler-dom': 3.2.41
|
||||
'@vue/shared': 3.2.41
|
||||
|
||||
/@vue/devtools-api/6.4.3:
|
||||
resolution: {integrity: sha512-9WCRwdROJvWcHAdyrR7SZMM/qUvllDZnpndHXokThkUsjnJ2xe4/pvsH9FZrxFe22L+JmDKczL79HjLJ7DK9rg==}
|
||||
@ -3494,43 +3532,63 @@ packages:
|
||||
'@vue/shared': 3.2.40
|
||||
estree-walker: 2.0.2
|
||||
magic-string: 0.25.9
|
||||
dev: true
|
||||
|
||||
/@vue/reactivity-transform/3.2.41:
|
||||
resolution: {integrity: sha512-mK5+BNMsL4hHi+IR3Ft/ho6Za+L3FA5j8WvreJ7XzHrqkPq8jtF/SMo7tuc9gHjLDwKZX1nP1JQOKo9IEAn54A==}
|
||||
dependencies:
|
||||
'@babel/parser': 7.19.3
|
||||
'@vue/compiler-core': 3.2.41
|
||||
'@vue/shared': 3.2.41
|
||||
estree-walker: 2.0.2
|
||||
magic-string: 0.25.9
|
||||
|
||||
/@vue/reactivity/3.2.40:
|
||||
resolution: {integrity: sha512-N9qgGLlZmtUBMHF9xDT4EkD9RdXde1Xbveb+niWMXuHVWQP5BzgRmE3SFyUBBcyayG4y1lhoz+lphGRRxxK4RA==}
|
||||
dependencies:
|
||||
'@vue/shared': 3.2.40
|
||||
dev: true
|
||||
|
||||
/@vue/runtime-core/3.2.40:
|
||||
resolution: {integrity: sha512-U1+rWf0H8xK8aBUZhnrN97yoZfHbjgw/bGUzfgKPJl69/mXDuSg8CbdBYBn6VVQdR947vWneQBFzdhasyzMUKg==}
|
||||
/@vue/reactivity/3.2.41:
|
||||
resolution: {integrity: sha512-9JvCnlj8uc5xRiQGZ28MKGjuCoPhhTwcoAdv3o31+cfGgonwdPNuvqAXLhlzu4zwqavFEG5tvaoINQEfxz+l6g==}
|
||||
dependencies:
|
||||
'@vue/reactivity': 3.2.40
|
||||
'@vue/shared': 3.2.40
|
||||
'@vue/shared': 3.2.41
|
||||
|
||||
/@vue/runtime-dom/3.2.40:
|
||||
resolution: {integrity: sha512-AO2HMQ+0s2+MCec8hXAhxMgWhFhOPJ/CyRXnmTJ6XIOnJFLrH5Iq3TNwvVcODGR295jy77I6dWPj+wvFoSYaww==}
|
||||
/@vue/runtime-core/3.2.41:
|
||||
resolution: {integrity: sha512-0LBBRwqnI0p4FgIkO9q2aJBBTKDSjzhnxrxHYengkAF6dMOjeAIZFDADAlcf2h3GDALWnblbeprYYpItiulSVQ==}
|
||||
dependencies:
|
||||
'@vue/runtime-core': 3.2.40
|
||||
'@vue/shared': 3.2.40
|
||||
'@vue/reactivity': 3.2.41
|
||||
'@vue/shared': 3.2.41
|
||||
|
||||
/@vue/runtime-dom/3.2.41:
|
||||
resolution: {integrity: sha512-U7zYuR1NVIP8BL6jmOqmapRAHovEFp7CSw4pR2FacqewXNGqZaRfHoNLQsqQvVQ8yuZNZtxSZy0FFyC70YXPpA==}
|
||||
dependencies:
|
||||
'@vue/runtime-core': 3.2.41
|
||||
'@vue/shared': 3.2.41
|
||||
csstype: 2.6.21
|
||||
|
||||
/@vue/server-renderer/3.2.40_vue@3.2.40:
|
||||
resolution: {integrity: sha512-gtUcpRwrXOJPJ4qyBpU3EyxQa4EkV8I4f8VrDePcGCPe4O/hd0BPS7v9OgjIQob6Ap8VDz9G+mGTKazE45/95w==}
|
||||
/@vue/server-renderer/3.2.41_vue@3.2.41:
|
||||
resolution: {integrity: sha512-7YHLkfJdTlsZTV0ae5sPwl9Gn/EGr2hrlbcS/8naXm2CDpnKUwC68i1wGlrYAfIgYWL7vUZwk2GkYLQH5CvFig==}
|
||||
peerDependencies:
|
||||
vue: 3.2.40
|
||||
vue: 3.2.41
|
||||
dependencies:
|
||||
'@vue/compiler-ssr': 3.2.40
|
||||
'@vue/shared': 3.2.40
|
||||
vue: 3.2.40
|
||||
'@vue/compiler-ssr': 3.2.41
|
||||
'@vue/shared': 3.2.41
|
||||
vue: 3.2.41
|
||||
|
||||
/@vue/shared/3.2.40:
|
||||
resolution: {integrity: sha512-0PLQ6RUtZM0vO3teRfzGi4ltLUO5aO+kLgwh4Um3THSR03rpQWLTuRCkuO5A41ITzwdWeKdPHtSARuPkoo5pCQ==}
|
||||
dev: true
|
||||
|
||||
/@vue/test-utils/2.1.0_vue@3.2.40:
|
||||
/@vue/shared/3.2.41:
|
||||
resolution: {integrity: sha512-W9mfWLHmJhkfAmV+7gDjcHeAWALQtgGT3JErxULl0oz6R6+3ug91I7IErs93eCFhPCZPHBs4QJS7YWEV7A3sxw==}
|
||||
|
||||
/@vue/test-utils/2.1.0_vue@3.2.41:
|
||||
resolution: {integrity: sha512-U4AxAD/tKJ3ajxYew1gkfEotpr96DE/gLXpbl+nPbsNRqGBfQZZA7YhwGoQNDPgon56v+IGZDrYq7pe3GDl9aw==}
|
||||
peerDependencies:
|
||||
vue: ^3.0.1
|
||||
dependencies:
|
||||
vue: 3.2.40
|
||||
vue: 3.2.41
|
||||
dev: true
|
||||
|
||||
/@vue/tsconfig/0.1.3_@types+node@16.11.64:
|
||||
@ -3544,13 +3602,13 @@ packages:
|
||||
'@types/node': 16.11.64
|
||||
dev: true
|
||||
|
||||
/@vueuse/core/9.3.0_vue@3.2.40:
|
||||
/@vueuse/core/9.3.0_vue@3.2.41:
|
||||
resolution: {integrity: sha512-64Rna8IQDWpdrJxgitDg7yv1yTp41ZmvV8zlLEylK4QQLWAhz1OFGZDPZ8bU4lwcGgbEJ2sGi2jrdNh4LttUSQ==}
|
||||
dependencies:
|
||||
'@types/web-bluetooth': 0.0.15
|
||||
'@vueuse/metadata': 9.3.0
|
||||
'@vueuse/shared': 9.3.0_vue@3.2.40
|
||||
vue-demi: 0.13.11_vue@3.2.40
|
||||
'@vueuse/shared': 9.3.0_vue@3.2.41
|
||||
vue-demi: 0.13.11_vue@3.2.41
|
||||
transitivePeerDependencies:
|
||||
- '@vue/composition-api'
|
||||
- vue
|
||||
@ -3560,23 +3618,23 @@ packages:
|
||||
resolution: {integrity: sha512-GnnfjbzIPJIh9ngL9s9oGU1+Hx/h5/KFqTfJykzh/1xjaHkedV9g0MASpdmPZIP+ynNhKAcEfA6g5i8KXwtoMA==}
|
||||
dev: false
|
||||
|
||||
/@vueuse/router/9.3.0_c7eza3xvlyb4mo6qeit5ggeo6u:
|
||||
/@vueuse/router/9.3.0_4g567gsol3fv3jos66rjdswwp4:
|
||||
resolution: {integrity: sha512-UFN2MFciprH21oYsAgNHeDJ4Bd86HpRm9gximSN8j6h4fc2aa62fvfhprfHqdTxYAcgcGkMwcc9TO75jOvr8gg==}
|
||||
peerDependencies:
|
||||
vue-router: '>=4.0.0-rc.1'
|
||||
dependencies:
|
||||
'@vueuse/shared': 9.3.0_vue@3.2.40
|
||||
vue-demi: 0.13.11_vue@3.2.40
|
||||
vue-router: 4.1.5_vue@3.2.40
|
||||
'@vueuse/shared': 9.3.0_vue@3.2.41
|
||||
vue-demi: 0.13.11_vue@3.2.41
|
||||
vue-router: 4.1.5_vue@3.2.41
|
||||
transitivePeerDependencies:
|
||||
- '@vue/composition-api'
|
||||
- vue
|
||||
dev: false
|
||||
|
||||
/@vueuse/shared/9.3.0_vue@3.2.40:
|
||||
/@vueuse/shared/9.3.0_vue@3.2.41:
|
||||
resolution: {integrity: sha512-caGUWLY0DpPC6l31KxeUy6vPVNA0yKxx81jFYLoMpyP6cF84FG5Dkf69DfSUqL57wX8JcUkJDMnQaQIZPWFEQQ==}
|
||||
dependencies:
|
||||
vue-demi: 0.13.11_vue@3.2.40
|
||||
vue-demi: 0.13.11_vue@3.2.41
|
||||
transitivePeerDependencies:
|
||||
- '@vue/composition-api'
|
||||
- vue
|
||||
@ -6768,14 +6826,14 @@ packages:
|
||||
resolution: {integrity: sha512-W7cHV7Hrwjid6lWmy0IhsWDFQboWSng25U3VVywpHOTJnnAZNPScog67G+cVpeX9f7yDD21ih0WDrMMT+JoaYg==}
|
||||
dev: false
|
||||
|
||||
/floating-vue/2.0.0-beta.20_vue@3.2.40:
|
||||
/floating-vue/2.0.0-beta.20_vue@3.2.41:
|
||||
resolution: {integrity: sha512-N68otcpp6WwcYC7zP8GeJqNZVdfvS7tEY88lwmuAHeqRgnfWx1Un8enzLxROyVnBDZ3TwUoUdj5IFg+bUT7JeA==}
|
||||
peerDependencies:
|
||||
vue: ^3.2.0
|
||||
dependencies:
|
||||
'@floating-ui/dom': 0.1.10
|
||||
vue: 3.2.40
|
||||
vue-resize: 2.0.0-alpha.1_vue@3.2.40
|
||||
vue: 3.2.41
|
||||
vue-resize: 2.0.0-alpha.1_vue@3.2.41
|
||||
dev: false
|
||||
|
||||
/flush-write-stream/2.0.0:
|
||||
@ -9457,14 +9515,14 @@ packages:
|
||||
resolution: {integrity: sha512-8Q1hXew6ETzqKRAs3jjLioSxNfT1cx74ooiF8RlAONwVMcfq+UdzLC2eB5qcPldUxaE5w3ytLkrmV1TGddhZTA==}
|
||||
engines: {node: '>=6.0'}
|
||||
dependencies:
|
||||
'@babel/parser': 7.16.8
|
||||
'@babel/parser': 7.19.3
|
||||
dev: true
|
||||
|
||||
/node-source-walk/5.0.0:
|
||||
resolution: {integrity: sha512-58APXoMXpmmU+oVBJFajhTCoD8d/OGtngnVAWzIo2A8yn0IXwBzvIVIsTzoie/SrA37u+1hnpNz2HMWx/VIqlw==}
|
||||
engines: {node: '>=12'}
|
||||
dependencies:
|
||||
'@babel/parser': 7.16.8
|
||||
'@babel/parser': 7.19.3
|
||||
dev: true
|
||||
|
||||
/node-stream-zip/1.15.0:
|
||||
@ -10125,7 +10183,7 @@ packages:
|
||||
engines: {node: '>=6'}
|
||||
dev: true
|
||||
|
||||
/pinia/2.0.22_bfjwoga25wxjazzogo7o372nwq:
|
||||
/pinia/2.0.22_l7r24p6nevbtlimqmqcwa3ouhu:
|
||||
resolution: {integrity: sha512-u+b8/BC+tmvo3ACbYO2w5NfxHWFOjvvw9DQnyT0dW8aUMCPRQT5QnfZ5R5W2MzZBMTeZRMQI7V/QFbafmM9QHw==}
|
||||
peerDependencies:
|
||||
'@vue/composition-api': ^1.4.0
|
||||
@ -10139,8 +10197,8 @@ packages:
|
||||
dependencies:
|
||||
'@vue/devtools-api': 6.4.3
|
||||
typescript: 4.8.4
|
||||
vue: 3.2.40
|
||||
vue-demi: 0.13.11_vue@3.2.40
|
||||
vue: 3.2.41
|
||||
vue-demi: 0.13.11_vue@3.2.41
|
||||
dev: false
|
||||
|
||||
/pinkie-promise/2.0.1:
|
||||
@ -12578,7 +12636,7 @@ packages:
|
||||
extsprintf: 1.3.0
|
||||
dev: true
|
||||
|
||||
/vite-plugin-pwa/0.13.1_bhe5iaipiq3lmbaxwdxgnnn2gq:
|
||||
/vite-plugin-pwa/0.13.1_2txo4viysstjrz5b6oxcrxybay:
|
||||
resolution: {integrity: sha512-NR3dIa+o2hzlzo4lF4Gu0cYvoMjSw2DdRc6Epw1yjmCqWaGuN86WK9JqZie4arNlE1ZuWT3CLiMdiX5wcmmUmg==}
|
||||
peerDependencies:
|
||||
vite: ^3.1.0
|
||||
@ -12589,7 +12647,7 @@ packages:
|
||||
fast-glob: 3.2.12
|
||||
pretty-bytes: 6.0.0
|
||||
rollup: 2.79.1
|
||||
vite: 3.1.4_sass@1.55.0+terser@5.15.1
|
||||
vite: 3.1.8_sass@1.55.0+terser@5.15.1
|
||||
workbox-build: 6.5.4
|
||||
workbox-window: 6.5.4
|
||||
transitivePeerDependencies:
|
||||
@ -12603,8 +12661,8 @@ packages:
|
||||
svgo: 2.8.0
|
||||
dev: true
|
||||
|
||||
/vite/3.1.4_sass@1.55.0+terser@5.15.1:
|
||||
resolution: {integrity: sha512-JoQI08aBjY9lycL7jcEq4p9o1xUjq5aRvdH4KWaXtkSx7e7RpAh9D3IjzDWRD4Fg44LS3oDAIOG/Kq1L+82psA==}
|
||||
/vite/3.1.8_sass@1.55.0+terser@5.15.1:
|
||||
resolution: {integrity: sha512-m7jJe3nufUbuOfotkntGFupinL/fmuTNuQmiVE7cH2IZMuf4UbfbGYMUT3jVWgGYuRVLY9j8NnrRqgw5rr5QTg==}
|
||||
engines: {node: ^14.18.0 || >=16.0.0}
|
||||
hasBin: true
|
||||
peerDependencies:
|
||||
@ -12665,7 +12723,7 @@ packages:
|
||||
tinybench: 2.3.0
|
||||
tinypool: 0.3.0
|
||||
tinyspy: 1.0.2
|
||||
vite: 3.1.4_sass@1.55.0+terser@5.15.1
|
||||
vite: 3.1.8_sass@1.55.0+terser@5.15.1
|
||||
transitivePeerDependencies:
|
||||
- less
|
||||
- sass
|
||||
@ -12674,7 +12732,7 @@ packages:
|
||||
- terser
|
||||
dev: true
|
||||
|
||||
/vue-advanced-cropper/2.8.6_vue@3.2.40:
|
||||
/vue-advanced-cropper/2.8.6_vue@3.2.41:
|
||||
resolution: {integrity: sha512-R1vkXG/Vam3OEd3vMJsVSJkXUc9ejM9l/NzPcPvkyzKGHwF69c2v1lh2Kqj2A5MCqrTmk76bmzmWFuYj+AcwmA==}
|
||||
engines: {node: '>=8', npm: '>=5'}
|
||||
peerDependencies:
|
||||
@ -12683,10 +12741,10 @@ packages:
|
||||
classnames: 2.3.2
|
||||
debounce: 1.2.1
|
||||
easy-bem: 1.1.1
|
||||
vue: 3.2.40
|
||||
vue: 3.2.41
|
||||
dev: false
|
||||
|
||||
/vue-demi/0.13.11_vue@3.2.40:
|
||||
/vue-demi/0.13.11_vue@3.2.41:
|
||||
resolution: {integrity: sha512-IR8HoEEGM65YY3ZJYAjMlKygDQn25D5ajNFNoKh9RSDMQtlzCxtfQjdQgv9jjK+m3377SsJXY8ysq8kLCZL25A==}
|
||||
engines: {node: '>=12'}
|
||||
hasBin: true
|
||||
@ -12698,7 +12756,7 @@ packages:
|
||||
'@vue/composition-api':
|
||||
optional: true
|
||||
dependencies:
|
||||
vue: 3.2.40
|
||||
vue: 3.2.41
|
||||
dev: false
|
||||
|
||||
/vue-drag-resize/2.0.3:
|
||||
@ -12723,17 +12781,17 @@ packages:
|
||||
- supports-color
|
||||
dev: true
|
||||
|
||||
/vue-flatpickr-component/9.0.6_vue@3.2.40:
|
||||
resolution: {integrity: sha512-U3355po5WPejAagvDig+MA7v8NWr0+Dbx3a1pds19hx4i9CeXuBSpD7vl0fxKhk+Hfu3T+DN2aOR69HIwSJh1A==}
|
||||
engines: {node: '>=10.13.0'}
|
||||
/vue-flatpickr-component/9.0.8_vue@3.2.41:
|
||||
resolution: {integrity: sha512-wuvG3ijNkGwUKP+F5l4Jai5za46pI7T2AQ+boPY0QB2Y4EP6hcaubfaYwMqrs4w69u8JCnqsKqGg+mWpqF5j3A==}
|
||||
engines: {node: '>=12.13.0'}
|
||||
peerDependencies:
|
||||
vue: ^3.0.0
|
||||
dependencies:
|
||||
flatpickr: 4.6.13
|
||||
vue: 3.2.40
|
||||
vue: 3.2.41
|
||||
dev: false
|
||||
|
||||
/vue-i18n/9.2.2_vue@3.2.40:
|
||||
/vue-i18n/9.2.2_vue@3.2.41:
|
||||
resolution: {integrity: sha512-yswpwtj89rTBhegUAv9Mu37LNznyu3NpyLQmozF3i1hYOhwpG8RjcjIFIIfnu+2MDZJGSZPXaKWvnQA71Yv9TQ==}
|
||||
engines: {node: '>= 14'}
|
||||
peerDependencies:
|
||||
@ -12743,24 +12801,24 @@ packages:
|
||||
'@intlify/shared': 9.2.2
|
||||
'@intlify/vue-devtools': 9.2.2
|
||||
'@vue/devtools-api': 6.4.3
|
||||
vue: 3.2.40
|
||||
vue: 3.2.41
|
||||
dev: false
|
||||
|
||||
/vue-resize/2.0.0-alpha.1_vue@3.2.40:
|
||||
/vue-resize/2.0.0-alpha.1_vue@3.2.41:
|
||||
resolution: {integrity: sha512-7+iqOueLU7uc9NrMfrzbG8hwMqchfVfSzpVlCMeJQe4pyibqyoifDNbKTZvwxZKDvGkB+PdFeKvnGZMoEb8esg==}
|
||||
peerDependencies:
|
||||
vue: ^3.0.0
|
||||
dependencies:
|
||||
vue: 3.2.40
|
||||
vue: 3.2.41
|
||||
dev: false
|
||||
|
||||
/vue-router/4.1.5_vue@3.2.40:
|
||||
/vue-router/4.1.5_vue@3.2.41:
|
||||
resolution: {integrity: sha512-IsvoF5D2GQ/EGTs/Th4NQms9gd2NSqV+yylxIyp/OYp8xOwxmU8Kj/74E9DTSYAyH5LX7idVUngN3JSj1X4xcQ==}
|
||||
peerDependencies:
|
||||
vue: ^3.2.0
|
||||
dependencies:
|
||||
'@vue/devtools-api': 6.4.3
|
||||
vue: 3.2.40
|
||||
vue: 3.2.41
|
||||
dev: false
|
||||
|
||||
/vue-template-compiler/2.7.10:
|
||||
@ -12770,25 +12828,25 @@ packages:
|
||||
he: 1.2.0
|
||||
dev: true
|
||||
|
||||
/vue-tsc/1.0.2_typescript@4.8.4:
|
||||
resolution: {integrity: sha512-Atl8vBo1ThxZ8OjnCcquRCjRYczmQVF2nAjXVOqHA19Q4lvPX+bpbbDUhk8SDww6U10sttGc4Vjb+1xBwA4yow==}
|
||||
/vue-tsc/1.0.8_typescript@4.8.4:
|
||||
resolution: {integrity: sha512-+0sJ+QVH7SHLt8mV/uIw4xlHDk1mWigZkMFugfZTv8rlHpM3S2tCVZ0BWEGclT/0rKdO8j+St+mljpvhWPN/eQ==}
|
||||
hasBin: true
|
||||
peerDependencies:
|
||||
typescript: '*'
|
||||
dependencies:
|
||||
'@volar/vue-language-core': 1.0.2
|
||||
'@volar/vue-typescript': 1.0.2
|
||||
'@volar/vue-language-core': 1.0.8
|
||||
'@volar/vue-typescript': 1.0.8
|
||||
typescript: 4.8.4
|
||||
dev: true
|
||||
|
||||
/vue/3.2.40:
|
||||
resolution: {integrity: sha512-1mGHulzUbl2Nk3pfvI5aXYYyJUs1nm4kyvuz38u4xlQkLUn1i2R7nDbI4TufECmY8v1qNBHYy62bCaM+3cHP2A==}
|
||||
/vue/3.2.41:
|
||||
resolution: {integrity: sha512-uuuvnrDXEeZ9VUPljgHkqB5IaVO8SxhPpqF2eWOukVrBnRBx2THPSGQBnVRt0GrIG1gvCmFXMGbd7FqcT1ixNQ==}
|
||||
dependencies:
|
||||
'@vue/compiler-dom': 3.2.40
|
||||
'@vue/compiler-sfc': 3.2.40
|
||||
'@vue/runtime-dom': 3.2.40
|
||||
'@vue/server-renderer': 3.2.40_vue@3.2.40
|
||||
'@vue/shared': 3.2.40
|
||||
'@vue/compiler-dom': 3.2.41
|
||||
'@vue/compiler-sfc': 3.2.41
|
||||
'@vue/runtime-dom': 3.2.41
|
||||
'@vue/server-renderer': 3.2.41_vue@3.2.41
|
||||
'@vue/shared': 3.2.41
|
||||
|
||||
/wait-on/6.0.1:
|
||||
resolution: {integrity: sha512-zht+KASY3usTY5u2LgaNqn/Cd8MukxLGjdcZxT2ns5QzDmTFc4XoWBgC+C/na+sMRZTuVygQoMYwdcVjHnYIVw==}
|
||||
@ -13234,13 +13292,13 @@ packages:
|
||||
engines: {node: '>=12.20'}
|
||||
dev: true
|
||||
|
||||
/zhyswan-vuedraggable/4.1.3_vue@3.2.40:
|
||||
/zhyswan-vuedraggable/4.1.3_vue@3.2.41:
|
||||
resolution: {integrity: sha512-q4Mp52tQIvTAWG0CKxLCVLyG/3RnIskDxoJvfjDZ2kM8yTcMkY80VTc8rd3q9KwqJ0UVtjEGLufb23sjDp0peQ==}
|
||||
peerDependencies:
|
||||
vue: ^3.0.1
|
||||
dependencies:
|
||||
sortablejs: 1.14.0
|
||||
vue: 3.2.40
|
||||
vue: 3.2.41
|
||||
dev: false
|
||||
|
||||
/zip-stream/4.1.0:
|
||||
@ -13252,15 +13310,15 @@ packages:
|
||||
readable-stream: 3.6.0
|
||||
dev: true
|
||||
|
||||
file:vendor/infectoone-vue-ganttastic-2.1.1.tgz_dayjs@1.11.5+vue@3.2.40:
|
||||
resolution: {integrity: sha512-d9gBXW+UoKekBV3TNUpxC43QrrGUDeYeJ2+2oGt3UTu3Amuw53XYke7ea9TIi5R5RwfOdwinvwGCgf4CG8cUrQ==, tarball: file:vendor/infectoone-vue-ganttastic-2.1.1.tgz}
|
||||
file:vendor/infectoone-vue-ganttastic-2.1.1.tgz_dayjs@1.11.5+vue@3.2.41:
|
||||
resolution: {integrity: sha512-FCOa5sioj/e6k9QXzCHHt0Qydy733BdQMrCcjz4Dag5e7lBFPAoL1EgAA+JfmL4ZXldVpukjnmNYEPWdeIaftQ==, tarball: file:vendor/infectoone-vue-ganttastic-2.1.1.tgz}
|
||||
id: file:vendor/infectoone-vue-ganttastic-2.1.1.tgz
|
||||
name: '@infectoone/vue-ganttastic'
|
||||
version: 2.1.1
|
||||
peerDependencies:
|
||||
dayjs: ^1.11.5
|
||||
vue: ^3.2.38
|
||||
vue: ^3.2.40
|
||||
dependencies:
|
||||
dayjs: 1.11.5
|
||||
vue: 3.2.40
|
||||
vue: 3.2.41
|
||||
dev: false
|
||||
|
@ -1,31 +1,32 @@
|
||||
<template>
|
||||
<Loading
|
||||
v-if="taskService.loading || taskCollectionService.loading || dayjsLanguageLoading"
|
||||
class="gantt-container"
|
||||
/>
|
||||
<div class="gantt-container" v-else>
|
||||
<GGanttChart
|
||||
dateFormat="YYYY-MM-DDTHH:mm:ssZ[Z]"
|
||||
:chart-start="`${dateFrom} 00:00`"
|
||||
:chart-end="`${dateTo} 23:59`"
|
||||
precision="day"
|
||||
bar-start="startDate"
|
||||
bar-end="endDate"
|
||||
:grid="true"
|
||||
@dragend-bar="updateTask"
|
||||
@dblclick-bar="openTask"
|
||||
:width="ganttChartWidth + 'px'"
|
||||
>
|
||||
<template #timeunit="{label, value}">
|
||||
<div
|
||||
class="timeunit-wrapper"
|
||||
:class="{'today': dayIsToday(label)}">
|
||||
<span>{{ value }}</span>
|
||||
<span class="weekday">
|
||||
{{ weekdayFromTimeLabel(label) }}
|
||||
</span>
|
||||
</div>
|
||||
</template>
|
||||
<div>
|
||||
<Loading
|
||||
v-if="taskService.loading || taskCollectionService.loading || dayjsLanguageLoading"
|
||||
class="gantt-container"
|
||||
/>
|
||||
<div class="gantt-container" v-else>
|
||||
<GGanttChart
|
||||
:chart-start="`${props.dateFrom} 00:00`"
|
||||
:chart-end="`${props.dateTo} 23:59`"
|
||||
precision="day"
|
||||
bar-start="startDate"
|
||||
bar-end="endDate"
|
||||
:grid="true"
|
||||
@dragend-bar="updateTask"
|
||||
@dblclick-bar="openTask"
|
||||
:width="ganttChartWidth + 'px'"
|
||||
>
|
||||
<template #timeunit="{label, value}">
|
||||
<div
|
||||
class="timeunit-wrapper"
|
||||
:class="{'today': dayIsToday(label)}"
|
||||
>
|
||||
<span>{{ value }}</span>
|
||||
<span class="weekday">
|
||||
{{ weekdayFromTimeLabel(label) }}
|
||||
</span>
|
||||
</div>
|
||||
</template>
|
||||
<GGanttRow
|
||||
v-for="(bar, k) in ganttBars"
|
||||
:key="k"
|
||||
@ -33,15 +34,17 @@
|
||||
:bars="bar"
|
||||
/>
|
||||
</GGanttChart>
|
||||
</div>
|
||||
<TaskForm v-if="canWrite" @create-task="createTask" />
|
||||
</div>
|
||||
<TaskForm v-if="canWrite" @create-task="createTask" />
|
||||
</template>
|
||||
|
||||
<script setup lang="ts">
|
||||
import {computed, ref, watch, watchEffect, shallowReactive, type PropType} from 'vue'
|
||||
import {computed, ref, watch, watchEffect, shallowReactive} from 'vue'
|
||||
import {useRouter} from 'vue-router'
|
||||
import {format, parse} from 'date-fns'
|
||||
import dayjs from 'dayjs'
|
||||
import isToday from 'dayjs/plugin/isToday'
|
||||
|
||||
import {useDayjsLanguageSync} from '@/i18n'
|
||||
import TaskCollectionService from '@/services/taskCollection'
|
||||
@ -71,9 +74,12 @@ export type DateRange = {
|
||||
dateTo: string,
|
||||
}
|
||||
|
||||
export interface GanttChartProps extends DateRange {
|
||||
// export interface GanttChartProps extends DateRange {
|
||||
export interface GanttChartProps {
|
||||
listId: IList['id']
|
||||
showTasksWithoutDates: boolean
|
||||
dateFrom: string,
|
||||
dateTo: string,
|
||||
}
|
||||
|
||||
// export const DATE_FORMAT = 'yyyy-LL-dd HH:mm'
|
||||
@ -83,7 +89,9 @@ const props = withDefaults(defineProps<GanttChartProps>(), {
|
||||
})
|
||||
|
||||
// setup dayjs for vue-ganttastic
|
||||
const dayjsLanguageLoading = useDayjsLanguageSync(dayjs)
|
||||
const dayjsLanguageLoading = ref(false)
|
||||
// const dayjsLanguageLoading = useDayjsLanguageSync(dayjs)
|
||||
dayjs.extend(isToday)
|
||||
extendDayjs()
|
||||
|
||||
const baseStore = useBaseStore()
|
||||
@ -92,8 +100,8 @@ const router = useRouter()
|
||||
const taskCollectionService = shallowReactive(new TaskCollectionService())
|
||||
const taskService = shallowReactive(new TaskService())
|
||||
|
||||
const dateFromDate = computed(() => parse(props.dateFrom, 'yyyy-LL-dd', new Date()))
|
||||
const dateToDate = computed(() => parse(props.dateTo, 'yyyy-LL-dd', new Date()))
|
||||
const dateFromDate = computed(() => parse(props.dateFrom, 'yyyy-LL-dd', new Date(new Date().setHours(0,0,0,0))))
|
||||
const dateToDate = computed(() => parse(props.dateTo, 'yyyy-LL-dd', new Date(new Date().setHours(23,59,0,0))))
|
||||
|
||||
const DAY_WIDTH_PIXELS = 30
|
||||
const ganttChartWidth = computed(() => {
|
||||
@ -116,6 +124,13 @@ watch(
|
||||
{deep: true}
|
||||
)
|
||||
|
||||
type DateKebab = `${string}-${string}-${string}`
|
||||
type DateISO = string
|
||||
const DATE_FORMAT_KEBAB = 'yyyy-LL-dd'
|
||||
function isoToKebabDate(isoDate: DateISO) {
|
||||
return format(new Date(isoDate), DATE_FORMAT_KEBAB) as DateKebab
|
||||
}
|
||||
|
||||
const defaultStartDate = new Date().toISOString()
|
||||
const defaultEndDate = new Date((new Date()).setDate((new Date()).getDate() + 7)).toISOString()
|
||||
|
||||
@ -123,8 +138,8 @@ function transformTaskToGanttBar(t: ITask) {
|
||||
const black = 'var(--grey-800)'
|
||||
console.log(t)
|
||||
return [{
|
||||
startDate: t.startDate ? new Date(t.startDate).toISOString() : defaultStartDate,
|
||||
endDate: t.endDate ? new Date(t.endDate).toISOString() : defaultEndDate,
|
||||
startDate: isoToKebabDate(new Date(t.startDate ? t.startDate : defaultStartDate).toISOString()),
|
||||
endDate: isoToKebabDate(new Date(t.endDate ? t.endDate : defaultEndDate).toISOString()),
|
||||
ganttBarConfig: {
|
||||
id: String(t.id),
|
||||
label: t.title,
|
||||
|
@ -29,12 +29,12 @@
|
||||
<pre>{{dateRange}}</pre>
|
||||
<pre>{{new Date(dateRange.dateFrom).toISOString()}}</pre>
|
||||
<pre>{{new Date(dateRange.dateTo).toISOString()}}</pre>
|
||||
<!-- <gantt-chart
|
||||
<gantt-chart
|
||||
:list-id="filters.listId"
|
||||
:date-from="filters.dateFrom"
|
||||
:date-to="filters.dateTo"
|
||||
:date-from="isoToKebabDate(filters.dateFrom)"
|
||||
:date-to="isoToKebabDate(filters.dateTo)"
|
||||
:show-tasks-without-dates="showTasksWithoutDates"
|
||||
/> -->
|
||||
/>
|
||||
</card>
|
||||
</div>
|
||||
</template>
|
||||
@ -56,6 +56,7 @@ import ListWrapper from './ListWrapper.vue'
|
||||
import Fancycheckbox from '@/components/input/fancycheckbox.vue'
|
||||
|
||||
import {createAsyncComponent} from '@/helpers/createAsyncComponent'
|
||||
import GanttChart from '@/components/tasks/gantt-chart.vue'
|
||||
import type { IList } from '@/modelTypes/IList'
|
||||
|
||||
export type DateKebab = `${string}-${string}-${string}`
|
||||
@ -82,7 +83,7 @@ export interface GanttFilter {
|
||||
|
||||
type Options = Flatpickr.Options.Options
|
||||
|
||||
const GanttChart = createAsyncComponent(() => import('@/components/tasks/gantt-chart.vue'))
|
||||
// const GanttChart = createAsyncComponent(() => import('@/components/tasks/gantt-chart.vue'))
|
||||
|
||||
const props = defineProps<GanttParams>()
|
||||
|
||||
@ -123,10 +124,14 @@ function parseBooleanProp(booleanProp: string) {
|
||||
: Boolean(booleanProp)
|
||||
}
|
||||
|
||||
const DATE_FORMAT_KEBAB = 'yyyy-LL-dd'
|
||||
function isoToKebabDate(isoDate: DateISO) {
|
||||
return format(new Date(isoDate), DATE_FORMAT_KEBAB) as DateKebab
|
||||
}
|
||||
|
||||
const DEFAULT_SHOW_TASKS_WITHOUT_DATES = false
|
||||
|
||||
const DEFAULT_DATEFROM_DAY_OFFSET = 0
|
||||
// const DEFAULT_DATEFROM_DAY_OFFSET = -15
|
||||
const DEFAULT_DATEFROM_DAY_OFFSET = -15
|
||||
const DEFAULT_DATETO_DAY_OFFSET = +55
|
||||
|
||||
const now = new Date()
|
||||
@ -140,6 +145,8 @@ function getDefaultDateTo() {
|
||||
}
|
||||
|
||||
function routeToFilter(route: RouteLocationNormalized): GanttFilter {
|
||||
console.log('parseDateProp', parseDateProp(route.query.dateTo as DateKebab))
|
||||
console.log(parseDateProp(route.query.dateTo as DateKebab))
|
||||
return {
|
||||
listId: Number(route.params.listId as string),
|
||||
dateFrom: parseDateProp(route.query.dateFrom as DateKebab) || getDefaultDateFrom(),
|
||||
@ -155,8 +162,8 @@ function filterToRoute(filters: GanttFilter): RouteLocationRaw {
|
||||
filters.dateTo !== getDefaultDateTo()
|
||||
) {
|
||||
query = {
|
||||
dateFrom: format(new Date(filters.dateFrom), 'yyyy-LL-dd'),
|
||||
dateTo: format(new Date(filters.dateTo), 'yyyy-LL-dd'),
|
||||
dateFrom: isoToKebabDate(filters.dateFrom),
|
||||
dateTo: isoToKebabDate(filters.dateTo),
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -61,7 +61,6 @@ import {useTitle} from '@/composables/useTitle'
|
||||
|
||||
import {useBaseStore} from '@/stores/base'
|
||||
import {useListStore} from '@/stores/lists'
|
||||
import {useKanbanStore} from '@/stores/kanban'
|
||||
|
||||
const props = defineProps({
|
||||
listId: {
|
||||
@ -77,7 +76,6 @@ const props = defineProps({
|
||||
const route = useRoute()
|
||||
|
||||
const baseStore = useBaseStore()
|
||||
const kanbanStore = useKanbanStore()
|
||||
const listStore = useListStore()
|
||||
const listService = ref(new ListService())
|
||||
const loadedListId = ref(0)
|
||||
@ -90,6 +88,7 @@ const currentList = computed(() => {
|
||||
maxRight: null,
|
||||
} : baseStore.currentList
|
||||
})
|
||||
useTitle(() => currentList.value.id ? getListTitle(currentList.value) : '')
|
||||
|
||||
// watchEffect would be called every time the prop would get a value assigned, even if that value was the same as before.
|
||||
// This resulted in loading and setting the list multiple times, even when navigating away from it.
|
||||
@ -98,62 +97,47 @@ const currentList = computed(() => {
|
||||
// of it, most likely due to the rights not being properly populated.
|
||||
watch(
|
||||
() => props.listId,
|
||||
listId => loadList(listId),
|
||||
// loadList
|
||||
async (listIdToLoad: number) => {
|
||||
const listData = {id: listIdToLoad}
|
||||
saveListToHistory(listData)
|
||||
|
||||
// Don't load the list if we either already loaded it or aren't dealing with a list at all currently and
|
||||
// the currently loaded list has the right set.
|
||||
if (
|
||||
(
|
||||
listIdToLoad === loadedListId.value ||
|
||||
typeof listIdToLoad === 'undefined' ||
|
||||
listIdToLoad === currentList.value.id
|
||||
)
|
||||
&& typeof currentList.value !== 'undefined' && currentList.value.maxRight !== null
|
||||
) {
|
||||
loadedListId.value = props.listId
|
||||
return
|
||||
}
|
||||
|
||||
console.debug(`Loading list, props.viewName = ${props.viewName}, $route.params =`, route.params, `, loadedListId = ${loadedListId.value}, currentList = `, currentList.value)
|
||||
|
||||
// Set the current list to the one we're about to load so that the title is already shown at the top
|
||||
loadedListId.value = 0
|
||||
const listFromStore = listStore.getListById(listData.id)
|
||||
if (listFromStore !== null) {
|
||||
baseStore.setBackground(null)
|
||||
baseStore.setBlurHash(null)
|
||||
baseStore.handleSetCurrentList({list: listFromStore})
|
||||
}
|
||||
|
||||
// We create an extra list object instead of creating it in list.value because that would trigger a ui update which would result in bad ux.
|
||||
const list = new ListModel(listData)
|
||||
try {
|
||||
const loadedList = await listService.value.get(list)
|
||||
await baseStore.handleSetCurrentList({list: loadedList})
|
||||
} finally {
|
||||
loadedListId.value = props.listId
|
||||
}
|
||||
},
|
||||
{immediate: true},
|
||||
)
|
||||
|
||||
useTitle(() => currentList.value.id ? getListTitle(currentList.value) : '')
|
||||
|
||||
async function loadList(listIdToLoad: number) {
|
||||
const listData = {id: listIdToLoad}
|
||||
saveListToHistory(listData)
|
||||
|
||||
// This invalidates the loaded list at the kanban board which lets it reload its content when
|
||||
// switched to it. This ensures updates done to tasks in the gantt or list views are consistently
|
||||
// shown in all views while preventing reloads when closing a task popup.
|
||||
// We don't do this for the table view because that does not change tasks.
|
||||
// FIXME: remove this
|
||||
if (
|
||||
props.viewName === 'list.list' ||
|
||||
props.viewName === 'list.gantt'
|
||||
) {
|
||||
kanbanStore.setListId(0)
|
||||
}
|
||||
|
||||
// Don't load the list if we either already loaded it or aren't dealing with a list at all currently and
|
||||
// the currently loaded list has the right set.
|
||||
if (
|
||||
(
|
||||
listIdToLoad === loadedListId.value ||
|
||||
typeof listIdToLoad === 'undefined' ||
|
||||
listIdToLoad === currentList.value.id
|
||||
)
|
||||
&& typeof currentList.value !== 'undefined' && currentList.value.maxRight !== null
|
||||
) {
|
||||
loadedListId.value = props.listId
|
||||
return
|
||||
}
|
||||
|
||||
console.debug(`Loading list, props.viewName = ${props.viewName}, $route.params =`, route.params, `, loadedListId = ${loadedListId.value}, currentList = `, currentList.value)
|
||||
|
||||
// Set the current list to the one we're about to load so that the title is already shown at the top
|
||||
loadedListId.value = 0
|
||||
const listFromStore = listStore.getListById(listData.id)
|
||||
if (listFromStore !== null) {
|
||||
baseStore.setBackground(null)
|
||||
baseStore.setBlurHash(null)
|
||||
baseStore.handleSetCurrentList({list: listFromStore})
|
||||
}
|
||||
|
||||
// We create an extra list object instead of creating it in list.value because that would trigger a ui update which would result in bad ux.
|
||||
const list = new ListModel(listData)
|
||||
try {
|
||||
const loadedList = await listService.value.get(list)
|
||||
await baseStore.handleSetCurrentList({list: loadedList})
|
||||
} finally {
|
||||
loadedListId.value = props.listId
|
||||
}
|
||||
}
|
||||
</script>
|
||||
|
||||
<style lang="scss" scoped>
|
||||
|
BIN
vendor/infectoone-vue-ganttastic-2.1.1.tgz
vendored
BIN
vendor/infectoone-vue-ganttastic-2.1.1.tgz
vendored
Binary file not shown.
Loading…
x
Reference in New Issue
Block a user