From a924161a6178f9d4241c2600f46456c95862391b Mon Sep 17 00:00:00 2001 From: BillClinton Date: Fri, 10 Feb 2023 04:18:45 -0500 Subject: [PATCH 001/194] feat: create vuetify app `npm create vuetify` --- .../slate-task-library/.browserslistrc | 4 + .../slate-task-library/.editorconfig | 5 + static-webapps/slate-task-library/.gitignore | 23 + static-webapps/slate-task-library/README.md | 44 ++ static-webapps/slate-task-library/index.html | 16 + .../slate-task-library/jsconfig.json | 19 + .../slate-task-library/package-lock.json | 595 ++++++++++++++++++ .../slate-task-library/package.json | 21 + .../slate-task-library/public/favicon.ico | Bin 0 -> 15406 bytes static-webapps/slate-task-library/src/App.vue | 11 + .../slate-task-library/src/assets/logo.png | Bin 0 -> 11955 bytes .../slate-task-library/src/assets/logo.svg | 6 + .../src/components/HelloWorld.vue | 79 +++ static-webapps/slate-task-library/src/main.js | 20 + .../slate-task-library/src/plugins/index.js | 14 + .../slate-task-library/src/plugins/vuetify.js | 26 + .../src/plugins/webfontloader.js | 15 + .../slate-task-library/vite.config.js | 38 ++ 18 files changed, 936 insertions(+) create mode 100644 static-webapps/slate-task-library/.browserslistrc create mode 100644 static-webapps/slate-task-library/.editorconfig create mode 100644 static-webapps/slate-task-library/.gitignore create mode 100644 static-webapps/slate-task-library/README.md create mode 100644 static-webapps/slate-task-library/index.html create mode 100644 static-webapps/slate-task-library/jsconfig.json create mode 100644 static-webapps/slate-task-library/package-lock.json create mode 100644 static-webapps/slate-task-library/package.json create mode 100644 static-webapps/slate-task-library/public/favicon.ico create mode 100644 static-webapps/slate-task-library/src/App.vue create mode 100644 static-webapps/slate-task-library/src/assets/logo.png create mode 100644 static-webapps/slate-task-library/src/assets/logo.svg create mode 100644 static-webapps/slate-task-library/src/components/HelloWorld.vue create mode 100644 static-webapps/slate-task-library/src/main.js create mode 100644 static-webapps/slate-task-library/src/plugins/index.js create mode 100644 static-webapps/slate-task-library/src/plugins/vuetify.js create mode 100644 static-webapps/slate-task-library/src/plugins/webfontloader.js create mode 100644 static-webapps/slate-task-library/vite.config.js diff --git a/static-webapps/slate-task-library/.browserslistrc b/static-webapps/slate-task-library/.browserslistrc new file mode 100644 index 000000000..dc3bc09a2 --- /dev/null +++ b/static-webapps/slate-task-library/.browserslistrc @@ -0,0 +1,4 @@ +> 1% +last 2 versions +not dead +not ie 11 diff --git a/static-webapps/slate-task-library/.editorconfig b/static-webapps/slate-task-library/.editorconfig new file mode 100644 index 000000000..7053c49a0 --- /dev/null +++ b/static-webapps/slate-task-library/.editorconfig @@ -0,0 +1,5 @@ +[*.{js,jsx,ts,tsx,vue}] +indent_style = space +indent_size = 2 +trim_trailing_whitespace = true +insert_final_newline = true diff --git a/static-webapps/slate-task-library/.gitignore b/static-webapps/slate-task-library/.gitignore new file mode 100644 index 000000000..403adbc1e --- /dev/null +++ b/static-webapps/slate-task-library/.gitignore @@ -0,0 +1,23 @@ +.DS_Store +node_modules +/dist + + +# local env files +.env.local +.env.*.local + +# Log files +npm-debug.log* +yarn-debug.log* +yarn-error.log* +pnpm-debug.log* + +# Editor directories and files +.idea +.vscode +*.suo +*.ntvs* +*.njsproj +*.sln +*.sw? diff --git a/static-webapps/slate-task-library/README.md b/static-webapps/slate-task-library/README.md new file mode 100644 index 000000000..50b30e02e --- /dev/null +++ b/static-webapps/slate-task-library/README.md @@ -0,0 +1,44 @@ +# default + +## Project setup + +``` +# yarn +yarn + +# npm +npm install + +# pnpm +pnpm install +``` + +### Compiles and hot-reloads for development + +``` +# yarn +yarn dev + +# npm +npm run dev + +# pnpm +pnpm dev +``` + +### Compiles and minifies for production + +``` +# yarn +yarn build + +# npm +npm run build + +# pnpm +pnpm build +``` + +### Customize configuration + +See [Configuration Reference](https://vitejs.dev/config/). diff --git a/static-webapps/slate-task-library/index.html b/static-webapps/slate-task-library/index.html new file mode 100644 index 000000000..0b4e17cca --- /dev/null +++ b/static-webapps/slate-task-library/index.html @@ -0,0 +1,16 @@ + + + + + + + + Welcome to Vuetify 3 + + + +
+ + + + diff --git a/static-webapps/slate-task-library/jsconfig.json b/static-webapps/slate-task-library/jsconfig.json new file mode 100644 index 000000000..4aafc5f6e --- /dev/null +++ b/static-webapps/slate-task-library/jsconfig.json @@ -0,0 +1,19 @@ +{ + "compilerOptions": { + "target": "es5", + "module": "esnext", + "baseUrl": "./", + "moduleResolution": "node", + "paths": { + "@/*": [ + "src/*" + ] + }, + "lib": [ + "esnext", + "dom", + "dom.iterable", + "scripthost" + ] + } +} diff --git a/static-webapps/slate-task-library/package-lock.json b/static-webapps/slate-task-library/package-lock.json new file mode 100644 index 000000000..423782cc6 --- /dev/null +++ b/static-webapps/slate-task-library/package-lock.json @@ -0,0 +1,595 @@ +{ + "name": "slate-task-library", + "version": "0.0.0", + "lockfileVersion": 1, + "requires": true, + "dependencies": { + "@babel/parser": { + "version": "7.20.15", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.20.15.tgz", + "integrity": "sha512-DI4a1oZuf8wC+oAJA9RW6ga3Zbe8RZFt7kD9i4qAspz3I/yHet1VvC3DiSy/fsUvv5pvJuNPh0LPOdCcqinDPg==" + }, + "@esbuild/android-arm": { + "version": "0.15.18", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.15.18.tgz", + "integrity": "sha512-5GT+kcs2WVGjVs7+boataCkO5Fg0y4kCjzkB5bAip7H4jfnOS3dA6KPiww9W1OEKTKeAcUVhdZGvgI65OXmUnw==", + "dev": true, + "optional": true + }, + "@esbuild/linux-loong64": { + "version": "0.15.18", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.15.18.tgz", + "integrity": "sha512-L4jVKS82XVhw2nvzLg/19ClLWg0y27ulRwuP7lcyL6AbUWB5aPglXY3M21mauDQMDfRLs8cQmeT03r/+X3cZYQ==", + "dev": true, + "optional": true + }, + "@mdi/font": { + "version": "7.0.96", + "resolved": "https://registry.npmjs.org/@mdi/font/-/font-7.0.96.tgz", + "integrity": "sha512-rzlxTfR64hqY8yiBzDjmANfcd8rv+T5C0Yedv/TWk2QyAQYdc66e0kaN1ipmnYU3RukHRTRcBARHzzm+tIhL7w==" + }, + "@vitejs/plugin-vue": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/@vitejs/plugin-vue/-/plugin-vue-3.2.0.tgz", + "integrity": "sha512-E0tnaL4fr+qkdCNxJ+Xd0yM31UwMkQje76fsDVBBUCoGOUPexu2VDUYHL8P4CwV+zMvWw6nlRw19OnRKmYAJpw==", + "dev": true + }, + "@vue/compiler-core": { + "version": "3.2.47", + "resolved": "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.2.47.tgz", + "integrity": "sha512-p4D7FDnQb7+YJmO2iPEv0SQNeNzcbHdGByJDsT4lynf63AFkOTFN07HsiRSvjGo0QrxR/o3d0hUyNCUnBU2Tig==", + "requires": { + "@babel/parser": "^7.16.4", + "@vue/shared": "3.2.47", + "estree-walker": "^2.0.2", + "source-map": "^0.6.1" + } + }, + "@vue/compiler-dom": { + "version": "3.2.47", + "resolved": "https://registry.npmjs.org/@vue/compiler-dom/-/compiler-dom-3.2.47.tgz", + "integrity": "sha512-dBBnEHEPoftUiS03a4ggEig74J2YBZ2UIeyfpcRM2tavgMWo4bsEfgCGsu+uJIL/vax9S+JztH8NmQerUo7shQ==", + "requires": { + "@vue/compiler-core": "3.2.47", + "@vue/shared": "3.2.47" + } + }, + "@vue/compiler-sfc": { + "version": "3.2.47", + "resolved": "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-3.2.47.tgz", + "integrity": "sha512-rog05W+2IFfxjMcFw10tM9+f7i/+FFpZJJ5XHX72NP9eC2uRD+42M3pYcQqDXVYoj74kHMSEdQ/WmCjt8JFksQ==", + "requires": { + "@babel/parser": "^7.16.4", + "@vue/compiler-core": "3.2.47", + "@vue/compiler-dom": "3.2.47", + "@vue/compiler-ssr": "3.2.47", + "@vue/reactivity-transform": "3.2.47", + "@vue/shared": "3.2.47", + "estree-walker": "^2.0.2", + "magic-string": "^0.25.7", + "postcss": "^8.1.10", + "source-map": "^0.6.1" + } + }, + "@vue/compiler-ssr": { + "version": "3.2.47", + "resolved": "https://registry.npmjs.org/@vue/compiler-ssr/-/compiler-ssr-3.2.47.tgz", + "integrity": "sha512-wVXC+gszhulcMD8wpxMsqSOpvDZ6xKXSVWkf50Guf/S+28hTAXPDYRTbLQ3EDkOP5Xz/+SY37YiwDquKbJOgZw==", + "requires": { + "@vue/compiler-dom": "3.2.47", + "@vue/shared": "3.2.47" + } + }, + "@vue/reactivity": { + "version": "3.2.47", + "resolved": "https://registry.npmjs.org/@vue/reactivity/-/reactivity-3.2.47.tgz", + "integrity": "sha512-7khqQ/75oyyg+N/e+iwV6lpy1f5wq759NdlS1fpAhFXa8VeAIKGgk2E/C4VF59lx5b+Ezs5fpp/5WsRYXQiKxQ==", + "requires": { + "@vue/shared": "3.2.47" + } + }, + "@vue/reactivity-transform": { + "version": "3.2.47", + "resolved": "https://registry.npmjs.org/@vue/reactivity-transform/-/reactivity-transform-3.2.47.tgz", + "integrity": "sha512-m8lGXw8rdnPVVIdIFhf0LeQ/ixyHkH5plYuS83yop5n7ggVJU+z5v0zecwEnX7fa7HNLBhh2qngJJkxpwEEmYA==", + "requires": { + "@babel/parser": "^7.16.4", + "@vue/compiler-core": "3.2.47", + "@vue/shared": "3.2.47", + "estree-walker": "^2.0.2", + "magic-string": "^0.25.7" + } + }, + "@vue/runtime-core": { + "version": "3.2.47", + "resolved": "https://registry.npmjs.org/@vue/runtime-core/-/runtime-core-3.2.47.tgz", + "integrity": "sha512-RZxbLQIRB/K0ev0K9FXhNbBzT32H9iRtYbaXb0ZIz2usLms/D55dJR2t6cIEUn6vyhS3ALNvNthI+Q95C+NOpA==", + "requires": { + "@vue/reactivity": "3.2.47", + "@vue/shared": "3.2.47" + } + }, + "@vue/runtime-dom": { + "version": "3.2.47", + "resolved": "https://registry.npmjs.org/@vue/runtime-dom/-/runtime-dom-3.2.47.tgz", + "integrity": "sha512-ArXrFTjS6TsDei4qwNvgrdmHtD930KgSKGhS5M+j8QxXrDJYLqYw4RRcDy1bz1m1wMmb6j+zGLifdVHtkXA7gA==", + "requires": { + "@vue/runtime-core": "3.2.47", + "@vue/shared": "3.2.47", + "csstype": "^2.6.8" + } + }, + "@vue/server-renderer": { + "version": "3.2.47", + "resolved": "https://registry.npmjs.org/@vue/server-renderer/-/server-renderer-3.2.47.tgz", + "integrity": "sha512-dN9gc1i8EvmP9RCzvneONXsKfBRgqFeFZLurmHOveL7oH6HiFXJw5OGu294n1nHc/HMgTy6LulU/tv5/A7f/LA==", + "requires": { + "@vue/compiler-ssr": "3.2.47", + "@vue/shared": "3.2.47" + } + }, + "@vue/shared": { + "version": "3.2.47", + "resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.2.47.tgz", + "integrity": "sha512-BHGyyGN3Q97EZx0taMQ+OLNuZcW3d37ZEVmEAyeoA9ERdGvm9Irc/0Fua8SNyOtV1w6BS4q25wbMzJujO9HIfQ==" + }, + "@vuetify/loader-shared": { + "version": "1.7.1", + "resolved": "https://registry.npmjs.org/@vuetify/loader-shared/-/loader-shared-1.7.1.tgz", + "integrity": "sha512-kLUvuAed6RCvkeeTNJzuy14pqnkur8lTuner7v7pNE/kVhPR97TuyXwBSBMR1cJeiLiOfu6SF5XlCYbXByEx1g==", + "dev": true, + "requires": { + "find-cache-dir": "^3.3.2", + "upath": "^2.0.1" + } + }, + "commondir": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", + "integrity": "sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==", + "dev": true + }, + "csstype": { + "version": "2.6.21", + "resolved": "https://registry.npmjs.org/csstype/-/csstype-2.6.21.tgz", + "integrity": "sha512-Z1PhmomIfypOpoMjRQB70jfvy/wxT50qW08YXO5lMIJkrdq4yOTR+AW7FqutScmB9NkLwxo+jU+kZLbofZZq/w==" + }, + "debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dev": true, + "requires": { + "ms": "2.1.2" + } + }, + "esbuild": { + "version": "0.15.18", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.15.18.tgz", + "integrity": "sha512-x/R72SmW3sSFRm5zrrIjAhCeQSAWoni3CmHEqfQrZIQTM3lVCdehdwuIqaOtfC2slvpdlLa62GYoN8SxT23m6Q==", + "dev": true, + "requires": { + "@esbuild/android-arm": "0.15.18", + "@esbuild/linux-loong64": "0.15.18", + "esbuild-android-64": "0.15.18", + "esbuild-android-arm64": "0.15.18", + "esbuild-darwin-64": "0.15.18", + "esbuild-darwin-arm64": "0.15.18", + "esbuild-freebsd-64": "0.15.18", + "esbuild-freebsd-arm64": "0.15.18", + "esbuild-linux-32": "0.15.18", + "esbuild-linux-64": "0.15.18", + "esbuild-linux-arm": "0.15.18", + "esbuild-linux-arm64": "0.15.18", + "esbuild-linux-mips64le": "0.15.18", + "esbuild-linux-ppc64le": "0.15.18", + "esbuild-linux-riscv64": "0.15.18", + "esbuild-linux-s390x": "0.15.18", + "esbuild-netbsd-64": "0.15.18", + "esbuild-openbsd-64": "0.15.18", + "esbuild-sunos-64": "0.15.18", + "esbuild-windows-32": "0.15.18", + "esbuild-windows-64": "0.15.18", + "esbuild-windows-arm64": "0.15.18" + } + }, + "esbuild-android-64": { + "version": "0.15.18", + "resolved": "https://registry.npmjs.org/esbuild-android-64/-/esbuild-android-64-0.15.18.tgz", + "integrity": "sha512-wnpt3OXRhcjfIDSZu9bnzT4/TNTDsOUvip0foZOUBG7QbSt//w3QV4FInVJxNhKc/ErhUxc5z4QjHtMi7/TbgA==", + "dev": true, + "optional": true + }, + "esbuild-android-arm64": { + "version": "0.15.18", + "resolved": "https://registry.npmjs.org/esbuild-android-arm64/-/esbuild-android-arm64-0.15.18.tgz", + "integrity": "sha512-G4xu89B8FCzav9XU8EjsXacCKSG2FT7wW9J6hOc18soEHJdtWu03L3TQDGf0geNxfLTtxENKBzMSq9LlbjS8OQ==", + "dev": true, + "optional": true + }, + "esbuild-darwin-64": { + "version": "0.15.18", + "resolved": "https://registry.npmjs.org/esbuild-darwin-64/-/esbuild-darwin-64-0.15.18.tgz", + "integrity": "sha512-2WAvs95uPnVJPuYKP0Eqx+Dl/jaYseZEUUT1sjg97TJa4oBtbAKnPnl3b5M9l51/nbx7+QAEtuummJZW0sBEmg==", + "dev": true, + "optional": true + }, + "esbuild-darwin-arm64": { + "version": "0.15.18", + "resolved": "https://registry.npmjs.org/esbuild-darwin-arm64/-/esbuild-darwin-arm64-0.15.18.tgz", + "integrity": "sha512-tKPSxcTJ5OmNb1btVikATJ8NftlyNlc8BVNtyT/UAr62JFOhwHlnoPrhYWz09akBLHI9nElFVfWSTSRsrZiDUA==", + "dev": true, + "optional": true + }, + "esbuild-freebsd-64": { + "version": "0.15.18", + "resolved": "https://registry.npmjs.org/esbuild-freebsd-64/-/esbuild-freebsd-64-0.15.18.tgz", + "integrity": "sha512-TT3uBUxkteAjR1QbsmvSsjpKjOX6UkCstr8nMr+q7zi3NuZ1oIpa8U41Y8I8dJH2fJgdC3Dj3CXO5biLQpfdZA==", + "dev": true, + "optional": true + }, + "esbuild-freebsd-arm64": { + "version": "0.15.18", + "resolved": "https://registry.npmjs.org/esbuild-freebsd-arm64/-/esbuild-freebsd-arm64-0.15.18.tgz", + "integrity": "sha512-R/oVr+X3Tkh+S0+tL41wRMbdWtpWB8hEAMsOXDumSSa6qJR89U0S/PpLXrGF7Wk/JykfpWNokERUpCeHDl47wA==", + "dev": true, + "optional": true + }, + "esbuild-linux-32": { + "version": "0.15.18", + "resolved": "https://registry.npmjs.org/esbuild-linux-32/-/esbuild-linux-32-0.15.18.tgz", + "integrity": "sha512-lphF3HiCSYtaa9p1DtXndiQEeQDKPl9eN/XNoBf2amEghugNuqXNZA/ZovthNE2aa4EN43WroO0B85xVSjYkbg==", + "dev": true, + "optional": true + }, + "esbuild-linux-64": { + "version": "0.15.18", + "resolved": "https://registry.npmjs.org/esbuild-linux-64/-/esbuild-linux-64-0.15.18.tgz", + "integrity": "sha512-hNSeP97IviD7oxLKFuii5sDPJ+QHeiFTFLoLm7NZQligur8poNOWGIgpQ7Qf8Balb69hptMZzyOBIPtY09GZYw==", + "dev": true, + "optional": true + }, + "esbuild-linux-arm": { + "version": "0.15.18", + "resolved": "https://registry.npmjs.org/esbuild-linux-arm/-/esbuild-linux-arm-0.15.18.tgz", + "integrity": "sha512-UH779gstRblS4aoS2qpMl3wjg7U0j+ygu3GjIeTonCcN79ZvpPee12Qun3vcdxX+37O5LFxz39XeW2I9bybMVA==", + "dev": true, + "optional": true + }, + "esbuild-linux-arm64": { + "version": "0.15.18", + "resolved": "https://registry.npmjs.org/esbuild-linux-arm64/-/esbuild-linux-arm64-0.15.18.tgz", + "integrity": "sha512-54qr8kg/6ilcxd+0V3h9rjT4qmjc0CccMVWrjOEM/pEcUzt8X62HfBSeZfT2ECpM7104mk4yfQXkosY8Quptug==", + "dev": true, + "optional": true + }, + "esbuild-linux-mips64le": { + "version": "0.15.18", + "resolved": "https://registry.npmjs.org/esbuild-linux-mips64le/-/esbuild-linux-mips64le-0.15.18.tgz", + "integrity": "sha512-Mk6Ppwzzz3YbMl/ZZL2P0q1tnYqh/trYZ1VfNP47C31yT0K8t9s7Z077QrDA/guU60tGNp2GOwCQnp+DYv7bxQ==", + "dev": true, + "optional": true + }, + "esbuild-linux-ppc64le": { + "version": "0.15.18", + "resolved": "https://registry.npmjs.org/esbuild-linux-ppc64le/-/esbuild-linux-ppc64le-0.15.18.tgz", + "integrity": "sha512-b0XkN4pL9WUulPTa/VKHx2wLCgvIAbgwABGnKMY19WhKZPT+8BxhZdqz6EgkqCLld7X5qiCY2F/bfpUUlnFZ9w==", + "dev": true, + "optional": true + }, + "esbuild-linux-riscv64": { + "version": "0.15.18", + "resolved": "https://registry.npmjs.org/esbuild-linux-riscv64/-/esbuild-linux-riscv64-0.15.18.tgz", + "integrity": "sha512-ba2COaoF5wL6VLZWn04k+ACZjZ6NYniMSQStodFKH/Pu6RxzQqzsmjR1t9QC89VYJxBeyVPTaHuBMCejl3O/xg==", + "dev": true, + "optional": true + }, + "esbuild-linux-s390x": { + "version": "0.15.18", + "resolved": "https://registry.npmjs.org/esbuild-linux-s390x/-/esbuild-linux-s390x-0.15.18.tgz", + "integrity": "sha512-VbpGuXEl5FCs1wDVp93O8UIzl3ZrglgnSQ+Hu79g7hZu6te6/YHgVJxCM2SqfIila0J3k0csfnf8VD2W7u2kzQ==", + "dev": true, + "optional": true + }, + "esbuild-netbsd-64": { + "version": "0.15.18", + "resolved": "https://registry.npmjs.org/esbuild-netbsd-64/-/esbuild-netbsd-64-0.15.18.tgz", + "integrity": "sha512-98ukeCdvdX7wr1vUYQzKo4kQ0N2p27H7I11maINv73fVEXt2kyh4K4m9f35U1K43Xc2QGXlzAw0K9yoU7JUjOg==", + "dev": true, + "optional": true + }, + "esbuild-openbsd-64": { + "version": "0.15.18", + "resolved": "https://registry.npmjs.org/esbuild-openbsd-64/-/esbuild-openbsd-64-0.15.18.tgz", + "integrity": "sha512-yK5NCcH31Uae076AyQAXeJzt/vxIo9+omZRKj1pauhk3ITuADzuOx5N2fdHrAKPxN+zH3w96uFKlY7yIn490xQ==", + "dev": true, + "optional": true + }, + "esbuild-sunos-64": { + "version": "0.15.18", + "resolved": "https://registry.npmjs.org/esbuild-sunos-64/-/esbuild-sunos-64-0.15.18.tgz", + "integrity": "sha512-On22LLFlBeLNj/YF3FT+cXcyKPEI263nflYlAhz5crxtp3yRG1Ugfr7ITyxmCmjm4vbN/dGrb/B7w7U8yJR9yw==", + "dev": true, + "optional": true + }, + "esbuild-windows-32": { + "version": "0.15.18", + "resolved": "https://registry.npmjs.org/esbuild-windows-32/-/esbuild-windows-32-0.15.18.tgz", + "integrity": "sha512-o+eyLu2MjVny/nt+E0uPnBxYuJHBvho8vWsC2lV61A7wwTWC3jkN2w36jtA+yv1UgYkHRihPuQsL23hsCYGcOQ==", + "dev": true, + "optional": true + }, + "esbuild-windows-64": { + "version": "0.15.18", + "resolved": "https://registry.npmjs.org/esbuild-windows-64/-/esbuild-windows-64-0.15.18.tgz", + "integrity": "sha512-qinug1iTTaIIrCorAUjR0fcBk24fjzEedFYhhispP8Oc7SFvs+XeW3YpAKiKp8dRpizl4YYAhxMjlftAMJiaUw==", + "dev": true, + "optional": true + }, + "esbuild-windows-arm64": { + "version": "0.15.18", + "resolved": "https://registry.npmjs.org/esbuild-windows-arm64/-/esbuild-windows-arm64-0.15.18.tgz", + "integrity": "sha512-q9bsYzegpZcLziq0zgUi5KqGVtfhjxGbnksaBFYmWLxeV/S1fK4OLdq2DFYnXcLMjlZw2L0jLsk1eGoB522WXQ==", + "dev": true, + "optional": true + }, + "estree-walker": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz", + "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==" + }, + "find-cache-dir": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-3.3.2.tgz", + "integrity": "sha512-wXZV5emFEjrridIgED11OoUKLxiYjAcqot/NJdAkOhlJ+vGzwhOAfcG5OX1jP+S0PcjEn8bdMJv+g2jwQ3Onig==", + "dev": true, + "requires": { + "commondir": "^1.0.1", + "make-dir": "^3.0.2", + "pkg-dir": "^4.1.0" + } + }, + "find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "dev": true, + "requires": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + } + }, + "fsevents": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", + "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", + "dev": true, + "optional": true + }, + "function-bind": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", + "dev": true + }, + "has": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", + "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "dev": true, + "requires": { + "function-bind": "^1.1.1" + } + }, + "is-core-module": { + "version": "2.11.0", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.11.0.tgz", + "integrity": "sha512-RRjxlvLDkD1YJwDbroBHMb+cukurkDWNyHx7D3oNB5x9rb5ogcksMC5wHCadcXoo67gVr/+3GFySh3134zi6rw==", + "dev": true, + "requires": { + "has": "^1.0.3" + } + }, + "locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "dev": true, + "requires": { + "p-locate": "^4.1.0" + } + }, + "magic-string": { + "version": "0.25.9", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.25.9.tgz", + "integrity": "sha512-RmF0AsMzgt25qzqqLc1+MbHmhdx0ojF2Fvs4XnOqz2ZOBXzzkEwc/dJQZCYHAn7v1jbVOjAZfK8msRn4BxO4VQ==", + "requires": { + "sourcemap-codec": "^1.4.8" + } + }, + "make-dir": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", + "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", + "dev": true, + "requires": { + "semver": "^6.0.0" + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + }, + "nanoid": { + "version": "3.3.4", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.4.tgz", + "integrity": "sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw==" + }, + "p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "dev": true, + "requires": { + "p-try": "^2.0.0" + } + }, + "p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "dev": true, + "requires": { + "p-limit": "^2.2.0" + } + }, + "p-try": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", + "dev": true + }, + "path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true + }, + "path-parse": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", + "dev": true + }, + "picocolors": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", + "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==" + }, + "pkg-dir": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", + "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", + "dev": true, + "requires": { + "find-up": "^4.0.0" + } + }, + "postcss": { + "version": "8.4.21", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.21.tgz", + "integrity": "sha512-tP7u/Sn/dVxK2NnruI4H9BG+x+Wxz6oeZ1cJ8P6G/PZY0IKk4k/63TDsQf2kQq3+qoJeLm2kIBUNlZe3zgb4Zg==", + "requires": { + "nanoid": "^3.3.4", + "picocolors": "^1.0.0", + "source-map-js": "^1.0.2" + } + }, + "resolve": { + "version": "1.22.1", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.1.tgz", + "integrity": "sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==", + "dev": true, + "requires": { + "is-core-module": "^2.9.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + } + }, + "roboto-fontface": { + "version": "0.10.0", + "resolved": "https://registry.npmjs.org/roboto-fontface/-/roboto-fontface-0.10.0.tgz", + "integrity": "sha512-OlwfYEgA2RdboZohpldlvJ1xngOins5d7ejqnIBWr9KaMxsnBqotpptRXTyfNRLnFpqzX6sTDt+X+a+6udnU8g==" + }, + "rollup": { + "version": "2.79.1", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.79.1.tgz", + "integrity": "sha512-uKxbd0IhMZOhjAiD5oAFp7BqvkA4Dv47qpOCtaNvng4HBwdbWtdOh8f5nZNuk2rp51PMGk3bzfWu5oayNEuYnw==", + "dev": true, + "requires": { + "fsevents": "~2.3.2" + } + }, + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + }, + "source-map-js": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz", + "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==" + }, + "sourcemap-codec": { + "version": "1.4.8", + "resolved": "https://registry.npmjs.org/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz", + "integrity": "sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==" + }, + "supports-preserve-symlinks-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", + "dev": true + }, + "upath": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/upath/-/upath-2.0.1.tgz", + "integrity": "sha512-1uEe95xksV1O0CYKXo8vQvN1JEbtJp7lb7C5U9HMsIp6IVwntkH/oNUzyVNQSd4S1sYk2FpSSW44FqMc8qee5w==", + "dev": true + }, + "vite": { + "version": "3.2.5", + "resolved": "https://registry.npmjs.org/vite/-/vite-3.2.5.tgz", + "integrity": "sha512-4mVEpXpSOgrssFZAOmGIr85wPHKvaDAcXqxVxVRZhljkJOMZi1ibLibzjLHzJvcok8BMguLc7g1W6W/GqZbLdQ==", + "dev": true, + "requires": { + "esbuild": "^0.15.9", + "fsevents": "~2.3.2", + "postcss": "^8.4.18", + "resolve": "^1.22.1", + "rollup": "^2.79.1" + } + }, + "vite-plugin-vuetify": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/vite-plugin-vuetify/-/vite-plugin-vuetify-1.0.2.tgz", + "integrity": "sha512-MubIcKD33O8wtgQXlbEXE7ccTEpHZ8nPpe77y9Wy3my2MWw/PgehP9VqTp92BLqr0R1dSL970Lynvisx3UxBFw==", + "dev": true, + "requires": { + "@vuetify/loader-shared": "^1.7.1", + "debug": "^4.3.3", + "upath": "^2.0.1" + } + }, + "vue": { + "version": "3.2.47", + "resolved": "https://registry.npmjs.org/vue/-/vue-3.2.47.tgz", + "integrity": "sha512-60188y/9Dc9WVrAZeUVSDxRQOZ+z+y5nO2ts9jWXSTkMvayiWxCWOWtBQoYjLeccfXkiiPZWAHcV+WTPhkqJHQ==", + "requires": { + "@vue/compiler-dom": "3.2.47", + "@vue/compiler-sfc": "3.2.47", + "@vue/runtime-dom": "3.2.47", + "@vue/server-renderer": "3.2.47", + "@vue/shared": "3.2.47" + } + }, + "vuetify": { + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/vuetify/-/vuetify-3.1.4.tgz", + "integrity": "sha512-6ERm2a0bJyMLjmRKTifN501o3MsCVp9agtoZsORw1b3X29ycTdXOJdRMEADaDSv59dBWwUVv3WqHcWzCG4Gwfw==" + }, + "webfontloader": { + "version": "1.6.28", + "resolved": "https://registry.npmjs.org/webfontloader/-/webfontloader-1.6.28.tgz", + "integrity": "sha512-Egb0oFEga6f+nSgasH3E0M405Pzn6y3/9tOVanv/DLfa1YBIgcv90L18YyWnvXkRbIM17v5Kv6IT2N6g1x5tvQ==" + } + } +} diff --git a/static-webapps/slate-task-library/package.json b/static-webapps/slate-task-library/package.json new file mode 100644 index 000000000..7732f1d74 --- /dev/null +++ b/static-webapps/slate-task-library/package.json @@ -0,0 +1,21 @@ +{ + "name": "slate-task-library", + "version": "0.0.0", + "scripts": { + "dev": "vite", + "build": "vite build", + "preview": "vite preview" + }, + "dependencies": { + "@mdi/font": "7.0.96", + "roboto-fontface": "*", + "vue": "^3.2.38", + "vuetify": "^3.0.0", + "webfontloader": "^1.0.0" + }, + "devDependencies": { + "@vitejs/plugin-vue": "^3.0.3", + "vite": "^3.1.9", + "vite-plugin-vuetify": "^1.0.0-alpha.12" + } +} diff --git a/static-webapps/slate-task-library/public/favicon.ico b/static-webapps/slate-task-library/public/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..8fb9f91b3aab4eec0c76ffc5342528033c61e247 GIT binary patch literal 15406 zcmeHO3v5%@8NNVarCoU?zSqezmT6npu}xxXJJhY(x=s~hQ>SSYYSncU&|(|9Y?QVX z@}TB1G8mASM;tRKYgJkrAW)&g7${B%c>oE7;)O>NNO_bu4G-IdNB({PbTkJL{ZGDJe2DLL+vq#sL?l$jZPe_*I2y@|4sBRjso zUy`aUlJo$60})6B%aMKN&yMG1Qvjth%4dDy{HM^34) z&_TyGJg3UC{J|n2-wr)LDYwhNWBH4VL-JgYz;erTEKiMF20`|$Cf~GysBU40j@&)u zboK>@(yL25%R|RmS~6@99bG>PviV`j>&k~M@~J%cn{`uCzUOyY^23rlWt6DH=aut3 zlZo^g63xIXwP(4)hgT<|I>hSGqh7YbLP$jL+%p0>vM2Su?wmOV;-uyLFww=KN5Ox{j<% zmi}mZc22bZyxbmI!x+Ch3+qsk+#YbHJ{CdQjDh~;LRJB63Pq&~p

*N){PEn7FA;EAwj=|b_AUGw z{Eb1Zt8`N8chL?vjkw~yAvg~N+W_qV|N7U7a3HGfPY0GBqUxOaLJzPO2|Qz7H&yF{ z!Y@7SbxH$-YlpxgCaImE$Fk6T4dUMU!=a+u##*PZb&m9d@{VbA<&v z;n*Hvm#Nt5zF}Ud{=9#v%+3;8${f~WV?Q`CFATe5JXp$wT(q1TOU7#0jK6PDXZ)(1 zOSF4N3hStRA?+K$*ZctH(lRF!KFSL%W20hM6%Rz+k9We?_C36J>PVG2%Y`27X;nW+ z*x`6oe7S`dXABgw#vFYvuM;-c|L9ua=7z9?9B!cL=Fyiz34xz{6kpCd?PeyG2V7mkg!!m@d$btKgDK_Ib zt|Qt#$Am-fZ&{xA0GOAnn8Ue+QQBY3NiO*vfvd{5lsp3L_K5f@hhj{}^Nk#us4?p+ ztOM)g!1L3Ff(Tk8KQe4khoQS4_&0;4zo|FQr(iM%k4L+U*z zff0J2FQWxM*K?>u4d$6_8R>l`cK8U+!w`A!D@A2^2+L%A~GSv8* z(uV!wgkD)YqY(1-;X}j zv4?n}%=LOp! z;8GgCC~I2q%*#5{$kpuKJ6-ET*}o#)Z>p>vQsxF25{?c6CQ5()gsGtn{Ul`*ykb!bDMnnlGUdfYdn+9lsY%+pJ_Z_xHs+imH? z!L`+luUT1yv*4C1Z&<#Qlui*r2~lxBI`sAm+}oX{s=OcRf9A0%Q^56>8DC==kKtgy z>D-TeE@f3uu4&Y?ZVVlM3wLg~Z>Y}xfNE|1MIAijELQN`Y2<45F5=t5>wtYuk>yuH zXEJj-vN;uZD0|537U$Eq5Oek?f#JlNGq{dN(qiDuxO185eWG@Tuk1zKUsCs)MAVm# zZTvIN+Wl0&MDXYQF#3{qXA$(Ft>uw;>&qkE2f#n|`-?1D`gl8Gqj+=j77qvaV7#CH z-mDV$x0TsBRP5B|jZ%mFQ}FDv4Rn5l$yl(|`Q7Oe;~u+P58Qvv*6uy)7U=EIpPM-5 zPv}(pkwc!Zx3$@4;Y){)0d2tO5v#db4**wJ~;d2`ShTX zw|GaKwMoD4ydIzqSN(;l&j_8}$q^eYga7tU+}ZvgxyO*m1UDkuojePFZ zG`-$PpE1`DpyrLMO}R7wCfu3t6Y|B7d%f_n+{8^32;HSdS9&hVGwt*sUYr-!%%`a~|XP)!GJa zaPfvq9vz7{ms4}`U~qpQ+@r?~G$CeSuOWUWWPj8xrxoKsi%ALkMoN~Re@yeI<`b#& zQakqh?^Bfdlv*~90r${a#kP)=j;z5r;Qua|_8~6ciamnnhpFd84r{fjgNVx%{UgRa z5XnEKlf}cZ&elidYgP}Qi}Z0^o$C^y%G~k#_Qp8=1^BDy6=xQN&GlMeiCUK;x&F$^ zjA44c!M?-)Y1kOO--Oix|DE7=F!d?WE|oc-P;ICUYO&YsIA3qS68`^+SoxzLDfxQ- z)V%&7_{XQaWqV^?8s0=b5Yxwfs(L2+kBDu`F4FIF*gxGfML8AK#-01US-npCiqalZ z?M~DOWA<^ZR|~P;79^A!*A-C1sshAC6<~Z9P|a%vs7IcNOJh792S@Vc$sCItcXG)K z1Fn?E#hswKujQD~WT#qpf3`ix0(EL{#By^?PeQ2& + + + + + + + + diff --git a/static-webapps/slate-task-library/src/assets/logo.png b/static-webapps/slate-task-library/src/assets/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..a5f23ae7bff64954cf3537377a9f99306baf083d GIT binary patch literal 11955 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 + + + + + diff --git a/static-webapps/slate-task-library/src/components/HelloWorld.vue b/static-webapps/slate-task-library/src/components/HelloWorld.vue new file mode 100644 index 000000000..6dde30fdf --- /dev/null +++ b/static-webapps/slate-task-library/src/components/HelloWorld.vue @@ -0,0 +1,79 @@ + + + diff --git a/static-webapps/slate-task-library/src/main.js b/static-webapps/slate-task-library/src/main.js new file mode 100644 index 000000000..daa1acfc2 --- /dev/null +++ b/static-webapps/slate-task-library/src/main.js @@ -0,0 +1,20 @@ +/** + * main.js + * + * Bootstraps Vuetify and other plugins then mounts the App` + */ + +// Components +import App from './App.vue' + +// Composables +import { createApp } from 'vue' + +// Plugins +import { registerPlugins } from '@/plugins' + +const app = createApp(App) + +registerPlugins(app) + +app.mount('#app') diff --git a/static-webapps/slate-task-library/src/plugins/index.js b/static-webapps/slate-task-library/src/plugins/index.js new file mode 100644 index 000000000..90ef7080e --- /dev/null +++ b/static-webapps/slate-task-library/src/plugins/index.js @@ -0,0 +1,14 @@ +/** + * plugins/index.js + * + * Automatically included in `./src/main.js` + */ + +// Plugins +import { loadFonts } from './webfontloader' +import vuetify from './vuetify' + +export function registerPlugins (app) { + loadFonts() + app.use(vuetify) +} diff --git a/static-webapps/slate-task-library/src/plugins/vuetify.js b/static-webapps/slate-task-library/src/plugins/vuetify.js new file mode 100644 index 000000000..4fcd6a94b --- /dev/null +++ b/static-webapps/slate-task-library/src/plugins/vuetify.js @@ -0,0 +1,26 @@ +/** + * plugins/vuetify.js + * + * Framework documentation: https://vuetifyjs.com` + */ + +// Styles +import '@mdi/font/css/materialdesignicons.css' +import 'vuetify/styles' + +// Composables +import { createVuetify } from 'vuetify' + +// https://vuetifyjs.com/en/introduction/why-vuetify/#feature-guides +export default createVuetify({ + theme: { + themes: { + light: { + colors: { + primary: '#1867C0', + secondary: '#5CBBF6', + }, + }, + }, + }, +}) diff --git a/static-webapps/slate-task-library/src/plugins/webfontloader.js b/static-webapps/slate-task-library/src/plugins/webfontloader.js new file mode 100644 index 000000000..92afa8a8d --- /dev/null +++ b/static-webapps/slate-task-library/src/plugins/webfontloader.js @@ -0,0 +1,15 @@ +/** + * plugins/webfontloader.js + * + * webfontloader documentation: https://github.com/typekit/webfontloader + */ + + export async function loadFonts () { + const webFontLoader = await import(/* webpackChunkName: "webfontloader" */'webfontloader') + + webFontLoader.load({ + google: { + families: ['Roboto:100,300,400,500,700,900&display=swap'], + }, + }) +} diff --git a/static-webapps/slate-task-library/vite.config.js b/static-webapps/slate-task-library/vite.config.js new file mode 100644 index 000000000..17bac022b --- /dev/null +++ b/static-webapps/slate-task-library/vite.config.js @@ -0,0 +1,38 @@ +// Plugins +import vue from '@vitejs/plugin-vue' +import vuetify, { transformAssetUrls } from 'vite-plugin-vuetify' + +// Utilities +import { defineConfig } from 'vite' +import { fileURLToPath, URL } from 'node:url' + +// https://vitejs.dev/config/ +export default defineConfig({ + plugins: [ + vue({ + template: { transformAssetUrls } + }), + // https://github.com/vuetifyjs/vuetify-loader/tree/next/packages/vite-plugin + vuetify({ + autoImport: true, + }), + ], + define: { 'process.env': {} }, + resolve: { + alias: { + '@': fileURLToPath(new URL('./src', import.meta.url)) + }, + extensions: [ + '.js', + '.json', + '.jsx', + '.mjs', + '.ts', + '.tsx', + '.vue', + ], + }, + server: { + port: 3000, + }, +}) From ce2422ef6d747b4116c7e7b682da84e2ddf371af Mon Sep 17 00:00:00 2001 From: Chef Habitat Studio Date: Fri, 10 Feb 2023 09:24:15 +0000 Subject: [PATCH 002/194] feat: remove boilerplate --- static-webapps/slate-task-library/src/App.vue | 3 +- .../slate-task-library/src/assets/logo.png | Bin 11955 -> 0 bytes .../slate-task-library/src/assets/logo.svg | 6 -- .../src/components/HelloWorld.vue | 79 ------------------ 4 files changed, 1 insertion(+), 87 deletions(-) delete mode 100644 static-webapps/slate-task-library/src/assets/logo.png delete mode 100644 static-webapps/slate-task-library/src/assets/logo.svg delete mode 100644 static-webapps/slate-task-library/src/components/HelloWorld.vue diff --git a/static-webapps/slate-task-library/src/App.vue b/static-webapps/slate-task-library/src/App.vue index d20b5b5ff..632ff2aa9 100644 --- a/static-webapps/slate-task-library/src/App.vue +++ b/static-webapps/slate-task-library/src/App.vue @@ -1,11 +1,10 @@ diff --git a/static-webapps/slate-task-library/src/assets/logo.png b/static-webapps/slate-task-library/src/assets/logo.png deleted file mode 100644 index a5f23ae7bff64954cf3537377a9f99306baf083d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 11955 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 - - - - - diff --git a/static-webapps/slate-task-library/src/components/HelloWorld.vue b/static-webapps/slate-task-library/src/components/HelloWorld.vue deleted file mode 100644 index 6dde30fdf..000000000 --- a/static-webapps/slate-task-library/src/components/HelloWorld.vue +++ /dev/null @@ -1,79 +0,0 @@ - - - From a0bee31debb9259aac83ce53605d5f4a7c10c554 Mon Sep 17 00:00:00 2001 From: BillClinton Date: Sun, 12 Feb 2023 00:13:45 -0500 Subject: [PATCH 003/194] feat: add script to serve build --- static-webapps/slate-task-library/package.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/static-webapps/slate-task-library/package.json b/static-webapps/slate-task-library/package.json index 7732f1d74..e8e7dcd76 100644 --- a/static-webapps/slate-task-library/package.json +++ b/static-webapps/slate-task-library/package.json @@ -4,7 +4,8 @@ "scripts": { "dev": "vite", "build": "vite build", - "preview": "vite preview" + "preview": "vite preview", + "dist": "serve -s dist" }, "dependencies": { "@mdi/font": "7.0.96", From 41e5e4bb3a527eb6d963380a5a8ee4072e523847 Mon Sep 17 00:00:00 2001 From: BillClinton Date: Sun, 12 Feb 2023 00:14:49 -0500 Subject: [PATCH 004/194] feat: add data table to vuetify plugin Currently pulling this from labs until it is included in main release --- static-webapps/slate-task-library/src/plugins/vuetify.js | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/static-webapps/slate-task-library/src/plugins/vuetify.js b/static-webapps/slate-task-library/src/plugins/vuetify.js index 4fcd6a94b..d2e4be6e7 100644 --- a/static-webapps/slate-task-library/src/plugins/vuetify.js +++ b/static-webapps/slate-task-library/src/plugins/vuetify.js @@ -11,8 +11,15 @@ import 'vuetify/styles' // Composables import { createVuetify } from 'vuetify' +// Components +import { VDataTable } from 'vuetify/labs/VDataTable' + + // https://vuetifyjs.com/en/introduction/why-vuetify/#feature-guides export default createVuetify({ + components: { + VDataTable + }, theme: { themes: { light: { From e3cf9dc3e5d747dfcd0c89b9c2b58072d65cfb99 Mon Sep 17 00:00:00 2001 From: BillClinton Date: Sun, 12 Feb 2023 00:19:20 -0500 Subject: [PATCH 005/194] feat: add task data table w/ test data --- static-webapps/slate-task-library/src/App.vue | 2 + .../src/components/MyDataTable.vue | 2218 +++++++++++++++++ 2 files changed, 2220 insertions(+) create mode 100644 static-webapps/slate-task-library/src/components/MyDataTable.vue diff --git a/static-webapps/slate-task-library/src/App.vue b/static-webapps/slate-task-library/src/App.vue index 632ff2aa9..459d838cb 100644 --- a/static-webapps/slate-task-library/src/App.vue +++ b/static-webapps/slate-task-library/src/App.vue @@ -2,9 +2,11 @@

test

+ diff --git a/static-webapps/slate-task-library/src/components/MyDataTable.vue b/static-webapps/slate-task-library/src/components/MyDataTable.vue new file mode 100644 index 000000000..e8e4f4283 --- /dev/null +++ b/static-webapps/slate-task-library/src/components/MyDataTable.vue @@ -0,0 +1,2218 @@ + + + From 2eb4d176e25b2849b9d4430bc82a875766ff8019 Mon Sep 17 00:00:00 2001 From: BillClinton Date: Sun, 12 Feb 2023 00:25:24 -0500 Subject: [PATCH 006/194] chore: update app title --- static-webapps/slate-task-library/index.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/static-webapps/slate-task-library/index.html b/static-webapps/slate-task-library/index.html index 0b4e17cca..bab880fff 100644 --- a/static-webapps/slate-task-library/index.html +++ b/static-webapps/slate-task-library/index.html @@ -5,7 +5,7 @@ - Welcome to Vuetify 3 + Task Library From a16357a600d07ffe04951741caf3593ea45703a6 Mon Sep 17 00:00:00 2001 From: BillClinton Date: Sun, 12 Feb 2023 00:37:25 -0500 Subject: [PATCH 007/194] feat: add template for ParentTask column header --- .../slate-task-library/src/components/MyDataTable.vue | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/static-webapps/slate-task-library/src/components/MyDataTable.vue b/static-webapps/slate-task-library/src/components/MyDataTable.vue index e8e4f4283..d4058f672 100644 --- a/static-webapps/slate-task-library/src/components/MyDataTable.vue +++ b/static-webapps/slate-task-library/src/components/MyDataTable.vue @@ -6,7 +6,11 @@ density="compact" item-value="name" class="elevation-1" - /> + > + + diff --git a/static-webapps/slate-task-library/src/components/templates/ParentTaskColumnTemplate.vue b/static-webapps/slate-task-library/src/components/templates/ParentTaskColumnTemplate.vue new file mode 100644 index 000000000..24996d5c3 --- /dev/null +++ b/static-webapps/slate-task-library/src/components/templates/ParentTaskColumnTemplate.vue @@ -0,0 +1,14 @@ + + + From 264be776a2f4ed36313e94278c2699635bbe4450 Mon Sep 17 00:00:00 2001 From: BillClinton Date: Sun, 12 Feb 2023 02:19:07 -0500 Subject: [PATCH 009/194] feat: add Creator template --- .../src/components/MyDataTable.vue | 5 +++++ .../components/templates/CreatorItemTemplate.vue | 15 +++++++++++++++ 2 files changed, 20 insertions(+) create mode 100644 static-webapps/slate-task-library/src/components/templates/CreatorItemTemplate.vue diff --git a/static-webapps/slate-task-library/src/components/MyDataTable.vue b/static-webapps/slate-task-library/src/components/MyDataTable.vue index 335ee8c31..afb9a017a 100644 --- a/static-webapps/slate-task-library/src/components/MyDataTable.vue +++ b/static-webapps/slate-task-library/src/components/MyDataTable.vue @@ -10,6 +10,9 @@ + @@ -20,10 +23,12 @@ From 08d534950f78b6242ad1ff274ca5bed1ccd1fb19 Mon Sep 17 00:00:00 2001 From: BillClinton Date: Sun, 12 Feb 2023 02:27:24 -0500 Subject: [PATCH 010/194] feat: add ParentTask item template --- .../src/components/MyDataTable.vue | 5 +++++ .../templates/ParentTaskItemTemplate.vue | 15 +++++++++++++++ 2 files changed, 20 insertions(+) create mode 100644 static-webapps/slate-task-library/src/components/templates/ParentTaskItemTemplate.vue diff --git a/static-webapps/slate-task-library/src/components/MyDataTable.vue b/static-webapps/slate-task-library/src/components/MyDataTable.vue index afb9a017a..b7ac96aa0 100644 --- a/static-webapps/slate-task-library/src/components/MyDataTable.vue +++ b/static-webapps/slate-task-library/src/components/MyDataTable.vue @@ -10,6 +10,9 @@ + @@ -22,12 +25,14 @@ From 508fb358c826573327d1cf6c9a0a49dcf9eb7ccc Mon Sep 17 00:00:00 2001 From: BillClinton Date: Sun, 12 Feb 2023 02:55:10 -0500 Subject: [PATCH 011/194] feat: add Skills item template --- .../src/components/MyDataTable.vue | 5 +++++ .../components/templates/SkillsItemTemplate.vue | 17 +++++++++++++++++ 2 files changed, 22 insertions(+) create mode 100644 static-webapps/slate-task-library/src/components/templates/SkillsItemTemplate.vue diff --git a/static-webapps/slate-task-library/src/components/MyDataTable.vue b/static-webapps/slate-task-library/src/components/MyDataTable.vue index b7ac96aa0..5a009487a 100644 --- a/static-webapps/slate-task-library/src/components/MyDataTable.vue +++ b/static-webapps/slate-task-library/src/components/MyDataTable.vue @@ -13,6 +13,9 @@ + @@ -26,6 +29,7 @@ From aae075aafbfc12068aeb75aac440b72b25a1ab23 Mon Sep 17 00:00:00 2001 From: BillClinton Date: Sun, 12 Feb 2023 03:02:44 -0500 Subject: [PATCH 012/194] feat: install pinia `npm install pinia@latest` --- .../slate-task-library/package-lock.json | 19 +++++++++++++++++++ .../slate-task-library/package.json | 1 + 2 files changed, 20 insertions(+) diff --git a/static-webapps/slate-task-library/package-lock.json b/static-webapps/slate-task-library/package-lock.json index 423782cc6..d7e571c9a 100644 --- a/static-webapps/slate-task-library/package-lock.json +++ b/static-webapps/slate-task-library/package-lock.json @@ -80,6 +80,11 @@ "@vue/shared": "3.2.47" } }, + "@vue/devtools-api": { + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/@vue/devtools-api/-/devtools-api-6.5.0.tgz", + "integrity": "sha512-o9KfBeaBmCKl10usN4crU53fYtC1r7jJwdGKjPT24t348rHxgfpZ0xL3Xm/gLUYnc0oTp8LAmrxOeLyu6tbk2Q==" + }, "@vue/reactivity": { "version": "3.2.47", "resolved": "https://registry.npmjs.org/@vue/reactivity/-/reactivity-3.2.47.tgz", @@ -468,6 +473,15 @@ "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==" }, + "pinia": { + "version": "2.0.30", + "resolved": "https://registry.npmjs.org/pinia/-/pinia-2.0.30.tgz", + "integrity": "sha512-q6DUmxWwe/mQgg+55QQjykpKC+aGeGdaJV3niminl19V08dE+LRTvSEuqi6/NLSGCKHI49KGL6tMNEOssFiMyA==", + "requires": { + "@vue/devtools-api": "^6.4.5", + "vue-demi": "*" + } + }, "pkg-dir": { "version": "4.2.0", "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", @@ -581,6 +595,11 @@ "@vue/shared": "3.2.47" } }, + "vue-demi": { + "version": "0.13.11", + "resolved": "https://registry.npmjs.org/vue-demi/-/vue-demi-0.13.11.tgz", + "integrity": "sha512-IR8HoEEGM65YY3ZJYAjMlKygDQn25D5ajNFNoKh9RSDMQtlzCxtfQjdQgv9jjK+m3377SsJXY8ysq8kLCZL25A==" + }, "vuetify": { "version": "3.1.4", "resolved": "https://registry.npmjs.org/vuetify/-/vuetify-3.1.4.tgz", diff --git a/static-webapps/slate-task-library/package.json b/static-webapps/slate-task-library/package.json index e8e7dcd76..b25f7437a 100644 --- a/static-webapps/slate-task-library/package.json +++ b/static-webapps/slate-task-library/package.json @@ -9,6 +9,7 @@ }, "dependencies": { "@mdi/font": "7.0.96", + "pinia": "^2.0.30", "roboto-fontface": "*", "vue": "^3.2.38", "vuetify": "^3.0.0", From 3a7e604d3ae83188c6641d7ea3c4aa1ced87fb29 Mon Sep 17 00:00:00 2001 From: BillClinton Date: Sun, 12 Feb 2023 03:12:32 -0500 Subject: [PATCH 013/194] feat: add pinia to app --- static-webapps/slate-task-library/src/main.js | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/static-webapps/slate-task-library/src/main.js b/static-webapps/slate-task-library/src/main.js index daa1acfc2..202ad1d7d 100644 --- a/static-webapps/slate-task-library/src/main.js +++ b/static-webapps/slate-task-library/src/main.js @@ -3,12 +3,11 @@ * * Bootstraps Vuetify and other plugins then mounts the App` */ - -// Components +import { createApp } from 'vue' +import { createPinia } from 'pinia' import App from './App.vue' -// Composables -import { createApp } from 'vue' +const pinia = createPinia() // Plugins import { registerPlugins } from '@/plugins' @@ -17,4 +16,5 @@ const app = createApp(App) registerPlugins(app) +app.use(pinia) app.mount('#app') From 1b50b2869068f5a2f2387e639bba4224cab4a009 Mon Sep 17 00:00:00 2001 From: BillClinton Date: Sun, 12 Feb 2023 03:14:11 -0500 Subject: [PATCH 014/194] chore: rename data table --- static-webapps/slate-task-library/src/App.vue | 6 +++--- .../src/components/{MyDataTable.vue => TasksDataTable.vue} | 0 2 files changed, 3 insertions(+), 3 deletions(-) rename static-webapps/slate-task-library/src/components/{MyDataTable.vue => TasksDataTable.vue} (100%) diff --git a/static-webapps/slate-task-library/src/App.vue b/static-webapps/slate-task-library/src/App.vue index 459d838cb..ef236949f 100644 --- a/static-webapps/slate-task-library/src/App.vue +++ b/static-webapps/slate-task-library/src/App.vue @@ -1,12 +1,12 @@ diff --git a/static-webapps/slate-task-library/src/components/MyDataTable.vue b/static-webapps/slate-task-library/src/components/TasksDataTable.vue similarity index 100% rename from static-webapps/slate-task-library/src/components/MyDataTable.vue rename to static-webapps/slate-task-library/src/components/TasksDataTable.vue From 3ae535404b7e5fa50090a08f1382e310fd7857b9 Mon Sep 17 00:00:00 2001 From: BillClinton Date: Mon, 13 Feb 2023 14:49:41 -0500 Subject: [PATCH 015/194] fix: resolve CORS issue with devServer proxy --- static-webapps/slate-task-library/vite.config.js | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/static-webapps/slate-task-library/vite.config.js b/static-webapps/slate-task-library/vite.config.js index 17bac022b..771eb6815 100644 --- a/static-webapps/slate-task-library/vite.config.js +++ b/static-webapps/slate-task-library/vite.config.js @@ -8,8 +8,11 @@ import { fileURLToPath, URL } from 'node:url' // https://vitejs.dev/config/ export default defineConfig({ + devServer: { + proxy: 'http://localhost:2190', + }, plugins: [ - vue({ + vue({ template: { transformAssetUrls } }), // https://github.com/vuetifyjs/vuetify-loader/tree/next/packages/vite-plugin From e419b6a5555f647556fb86648804b7b04a6710a8 Mon Sep 17 00:00:00 2001 From: BillClinton Date: Tue, 14 Feb 2023 15:09:00 -0500 Subject: [PATCH 016/194] feat: convert data table to server version --- .../src/components/TasksDataTable.vue | 2216 +---------------- .../slate-task-library/src/plugins/vuetify.js | 4 +- 2 files changed, 22 insertions(+), 2198 deletions(-) diff --git a/static-webapps/slate-task-library/src/components/TasksDataTable.vue b/static-webapps/slate-task-library/src/components/TasksDataTable.vue index 5a009487a..9a74038ec 100644 --- a/static-webapps/slate-task-library/src/components/TasksDataTable.vue +++ b/static-webapps/slate-task-library/src/components/TasksDataTable.vue @@ -1,10 +1,12 @@ From c8f68a6de6b8d44fed7cbe36faca793425ae1e79 Mon Sep 17 00:00:00 2001 From: BillClinton Date: Sat, 25 Feb 2023 11:05:52 -0500 Subject: [PATCH 039/194] fix: correct selection issue after delete --- .../src/components/DeleteConfirmation.vue | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/static-webapps/slate-task-library/src/components/DeleteConfirmation.vue b/static-webapps/slate-task-library/src/components/DeleteConfirmation.vue index 5d337d4a3..3780eae98 100644 --- a/static-webapps/slate-task-library/src/components/DeleteConfirmation.vue +++ b/static-webapps/slate-task-library/src/components/DeleteConfirmation.vue @@ -10,7 +10,7 @@ Delete Task - {{ task.Title }} + {{ title }} @@ -48,10 +48,14 @@ export default { return selected && selected.length > 0 ? selected[0].value : null; }, + title() { + return this.task ? this.task.Title : ""; + }, }, methods: { confirmDelete() { this.taskStore.destroy(this.task.ID).then(() => { + this.selected = []; this.dialog = false; }); }, From 29bb9bcc4ca74773ec9cc62da17f29c9f160c5af Mon Sep 17 00:00:00 2001 From: BillClinton Date: Sat, 25 Feb 2023 12:32:25 -0500 Subject: [PATCH 040/194] feat: add form component with ref --- .../src/components/TaskForm.vue | 192 +++++++++--------- 1 file changed, 100 insertions(+), 92 deletions(-) diff --git a/static-webapps/slate-task-library/src/components/TaskForm.vue b/static-webapps/slate-task-library/src/components/TaskForm.vue index 1a581a590..1b386140f 100644 --- a/static-webapps/slate-task-library/src/components/TaskForm.vue +++ b/static-webapps/slate-task-library/src/components/TaskForm.vue @@ -2,97 +2,99 @@ - - Create Task - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - * indicates required field - - - - - Close - - - Save - - + + + Create Task + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + * indicates required field + + + + + Close + + + Save + + + @@ -136,10 +138,16 @@ export default { }, methods: { save() { - this.taskStore.create({ Title: "test" }).then(() => { + console.log(this.fields); + this.taskStore.create(this.fields).then(() => { + this.reset(); this.dialog = false; }); }, + reset() { + console.log(this.$refs); + this.$refs.form.reset(); + }, }, }; From d02e0a5b90afe8ab4ec795540404eb311c737e7f Mon Sep 17 00:00:00 2001 From: BillClinton Date: Sat, 25 Feb 2023 16:34:42 -0500 Subject: [PATCH 041/194] feat: deselect grid when creating new task --- static-webapps/slate-task-library/src/components/TasksHeader.vue | 1 + 1 file changed, 1 insertion(+) diff --git a/static-webapps/slate-task-library/src/components/TasksHeader.vue b/static-webapps/slate-task-library/src/components/TasksHeader.vue index 87c4d375e..d42c9bf04 100644 --- a/static-webapps/slate-task-library/src/components/TasksHeader.vue +++ b/static-webapps/slate-task-library/src/components/TasksHeader.vue @@ -40,6 +40,7 @@ export default { createTask() { const taskUIStore = useTaskUIStore(); + taskUIStore.selected = []; taskUIStore.editFormVisible = true; }, editTask() { From 2c355fd87091cbf4f6da02714555f17cb386af92 Mon Sep 17 00:00:00 2001 From: BillClinton Date: Sat, 25 Feb 2023 16:35:59 -0500 Subject: [PATCH 042/194] feat: load form and add date fields --- .../src/components/TaskForm.vue | 61 ++++++++++++++----- .../src/components/fields/DateField.vue | 32 ++++++++++ 2 files changed, 79 insertions(+), 14 deletions(-) create mode 100644 static-webapps/slate-task-library/src/components/fields/DateField.vue diff --git a/static-webapps/slate-task-library/src/components/TaskForm.vue b/static-webapps/slate-task-library/src/components/TaskForm.vue index 1b386140f..ec452db93 100644 --- a/static-webapps/slate-task-library/src/components/TaskForm.vue +++ b/static-webapps/slate-task-library/src/components/TaskForm.vue @@ -54,18 +54,16 @@ - + > - + > { this.reset(); this.dialog = false; }); }, reset() { - console.log(this.$refs); - this.$refs.form.reset(); + if (this.$refs.form) { + this.$refs.form.reset(); + } + }, + onDialogToggle() { + const me = this; + + if (me.selected && me.selected.length > 0) { + me.load(); + } else { + me.reset(); + } }, }, }; diff --git a/static-webapps/slate-task-library/src/components/fields/DateField.vue b/static-webapps/slate-task-library/src/components/fields/DateField.vue new file mode 100644 index 000000000..aee0e4297 --- /dev/null +++ b/static-webapps/slate-task-library/src/components/fields/DateField.vue @@ -0,0 +1,32 @@ + + + From bb493b9b90a3c1811ceaa1d6048b0eff3dfc229d Mon Sep 17 00:00:00 2001 From: BillClinton Date: Sun, 26 Feb 2023 21:56:54 -0500 Subject: [PATCH 043/194] feat: add custom field for attachments --- .../src/components/TaskForm.vue | 14 +- .../src/components/fields/AttachmentField.vue | 216 ++++++++++++++++++ 2 files changed, 224 insertions(+), 6 deletions(-) create mode 100644 static-webapps/slate-task-library/src/components/fields/AttachmentField.vue diff --git a/static-webapps/slate-task-library/src/components/TaskForm.vue b/static-webapps/slate-task-library/src/components/TaskForm.vue index ec452db93..211ad38c1 100644 --- a/static-webapps/slate-task-library/src/components/TaskForm.vue +++ b/static-webapps/slate-task-library/src/components/TaskForm.vue @@ -65,18 +65,18 @@ label="Expiration Date" > - - - + + + @@ -104,11 +104,13 @@ import { useTaskUIStore } from "@/stores/TaskUIStore.js"; import { useExperienceTypeStore } from "@/stores/ExperienceTypeStore.js"; import { useSkillStore } from "@/stores/SkillStore.js"; import DateField from "@/components/fields/DateField.vue"; +import AttachmentField from "@/components/fields/AttachmentField.vue"; import { storeToRefs } from "pinia"; export default { components: { DateField, + AttachmentField, }, setup() { const taskStore = useTaskStore(), diff --git a/static-webapps/slate-task-library/src/components/fields/AttachmentField.vue b/static-webapps/slate-task-library/src/components/fields/AttachmentField.vue new file mode 100644 index 000000000..84c96a924 --- /dev/null +++ b/static-webapps/slate-task-library/src/components/fields/AttachmentField.vue @@ -0,0 +1,216 @@ + + + + + From 728336b8104b86613ec727ef7d8cfe7c5b5e9b0d Mon Sep 17 00:00:00 2001 From: BillClinton Date: Sun, 26 Feb 2023 23:28:48 -0500 Subject: [PATCH 044/194] refactor: remove unused properties and methods --- .../slate-task-library/src/plugins/slateapi.js | 17 ----------------- 1 file changed, 17 deletions(-) diff --git a/static-webapps/slate-task-library/src/plugins/slateapi.js b/static-webapps/slate-task-library/src/plugins/slateapi.js index df3e667c9..a0344a222 100644 --- a/static-webapps/slate-task-library/src/plugins/slateapi.js +++ b/static-webapps/slate-task-library/src/plugins/slateapi.js @@ -12,7 +12,6 @@ const props = { limit: 0, offset: 0, total: 0, - order: "asc", sortBy: null, loading: false, error: false, @@ -99,22 +98,6 @@ const methods = { setLimit: function (limit) { this.limit = limit; }, - getEncodedSortBy: function () { - const sort = this.sortBy; - - if (sort) { - return `&sort=${sort.key}&dir=${sort.order.toUpperCase()}`; - } - return ""; - }, - getEncodedOffset: function () { - const offset = this.offset; - - if (offset > 0) { - return `&offset=${offset}`; - } - return ""; - }, getRequestUrl: function (resource) { const me = this, protocol = me.api.useSSL ? "https://" : "http://", From 030d10e36bbc40fe50bf1ffe2def5987d55879b7 Mon Sep 17 00:00:00 2001 From: BillClinton Date: Sun, 26 Feb 2023 23:37:18 -0500 Subject: [PATCH 045/194] feat: add Parent Task combo field --- .../src/components/TaskForm.vue | 60 +++++++++++++++---- .../src/stores/ParentTaskStore.js | 13 ++++ 2 files changed, 61 insertions(+), 12 deletions(-) create mode 100644 static-webapps/slate-task-library/src/stores/ParentTaskStore.js diff --git a/static-webapps/slate-task-library/src/components/TaskForm.vue b/static-webapps/slate-task-library/src/components/TaskForm.vue index 211ad38c1..75c945de8 100644 --- a/static-webapps/slate-task-library/src/components/TaskForm.vue +++ b/static-webapps/slate-task-library/src/components/TaskForm.vue @@ -19,25 +19,32 @@ > - + :loading="loadingParentTasks" + :custom-filter=" + () => { + return true; + } + " + @update:search="queryParentTasks" + > import { useTaskStore } from "@/stores/TaskStore.js"; import { useTaskUIStore } from "@/stores/TaskUIStore.js"; +import { useParentTaskStore } from "@/stores/ParentTaskStore.js"; import { useExperienceTypeStore } from "@/stores/ExperienceTypeStore.js"; import { useSkillStore } from "@/stores/SkillStore.js"; import DateField from "@/components/fields/DateField.vue"; @@ -115,11 +123,13 @@ export default { setup() { const taskStore = useTaskStore(), taskUIStore = useTaskUIStore(), + parentTaskStore = useParentTaskStore(), experienceTypeStore = useExperienceTypeStore(), skillStore = useSkillStore(), { selected, editFormVisible: dialog } = storeToRefs(taskUIStore), - { data: ExperienceTypeComboData } = storeToRefs(experienceTypeStore), - { data: SkillComboData } = storeToRefs(skillStore); + { data: parentTaskComboData } = storeToRefs(parentTaskStore), + { data: experienceTypeComboData } = storeToRefs(experienceTypeStore), + { data: skillComboData } = storeToRefs(skillStore); experienceTypeStore.fetch(); skillStore.fetch(); @@ -128,8 +138,9 @@ export default { selected, taskStore, dialog, - ExperienceTypeComboData, - SkillComboData, + parentTaskComboData, + experienceTypeComboData, + skillComboData, }; }, data() { @@ -144,6 +155,7 @@ export default { Skills: [], Title: "", }, + loadingParentTasks: false, }; }, watch: { @@ -153,10 +165,23 @@ export default { }, methods: { load() { - const me = this; + const me = this, + parentTaskStore = useParentTaskStore(), + parentTitle = me.selected[0].value.ParentTask.Title; me.reset(); + /** + * TODO: we need the combo store to contain the value of the current parent task, but there's probably a better way to do this. + * can we query api by the parent task ID? + */ + if (parentTitle) { + parentTaskStore.extraParams = { + q: parentTitle, + }; + parentTaskStore.fetch(); + } + for (const field in me.fields) { if (Object.prototype.hasOwnProperty.call(me.fields, field)) { me.fields[field] = me.selected[0].value[field]; @@ -183,6 +208,17 @@ export default { me.reset(); } }, + queryParentTasks(query) { + const parentTaskStore = useParentTaskStore(); + + if (query && query.length > 2 && !this.loadingParentTasks) { + parentTaskStore.extraParams = { q: query }; + + parentTaskStore.fetch().then(() => { + this.loadingParentTasks = false; + }); + } + }, }, }; diff --git a/static-webapps/slate-task-library/src/stores/ParentTaskStore.js b/static-webapps/slate-task-library/src/stores/ParentTaskStore.js new file mode 100644 index 000000000..73449d724 --- /dev/null +++ b/static-webapps/slate-task-library/src/stores/ParentTaskStore.js @@ -0,0 +1,13 @@ +import { defineStore } from "pinia"; + +export const useParentTaskStore = defineStore("parentTaskStore", { + state: () => ({ + path: "/cbl/tasks", + limit: 30, + sortBy: { key: "Created", order: "asc" }, + includes: ["Creator"], + extraParams: { + q: "", + }, + }), +}); From d01327acd761d7f0acf4291ec3a8d6a13b5a6c2b Mon Sep 17 00:00:00 2001 From: BillClinton Date: Sun, 26 Feb 2023 23:57:17 -0500 Subject: [PATCH 046/194] feat: add edit mode to task form --- .../src/components/TaskForm.vue | 35 ++++++++++++++++--- 1 file changed, 31 insertions(+), 4 deletions(-) diff --git a/static-webapps/slate-task-library/src/components/TaskForm.vue b/static-webapps/slate-task-library/src/components/TaskForm.vue index 75c945de8..69388227d 100644 --- a/static-webapps/slate-task-library/src/components/TaskForm.vue +++ b/static-webapps/slate-task-library/src/components/TaskForm.vue @@ -4,7 +4,7 @@ - Create Task + {{ dialogTitle }} @@ -95,8 +95,8 @@ Close - - Save + + {{ submitButtonLabel }} @@ -155,9 +155,21 @@ export default { Skills: [], Title: "", }, + editKey: false, loadingParentTasks: false, }; }, + computed: { + editMode() { + return this.selected && this.selected.length; + }, + dialogTitle() { + return this.editMode ? "Edit Task" : "Add Task"; + }, + submitButtonLabel() { + return this.editMode ? "Update" : "Add"; + }, + }, watch: { dialog: { handler: "onDialogToggle", @@ -188,7 +200,22 @@ export default { } } }, - save() { + submit() { + const me = this; + + if (me.editMode) { + me.update(); + } else { + me.create(); + } + }, + create() { + this.taskStore.create(this.fields).then(() => { + this.reset(); + this.dialog = false; + }); + }, + update() { this.taskStore.create(this.fields).then(() => { this.reset(); this.dialog = false; From f0c9cfe635466b54d5c66125943fda88331c3293 Mon Sep 17 00:00:00 2001 From: BillClinton Date: Mon, 27 Feb 2023 00:14:09 -0500 Subject: [PATCH 047/194] fix: correct event name --- .../slate-task-library/src/components/TasksDataTable.vue | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/static-webapps/slate-task-library/src/components/TasksDataTable.vue b/static-webapps/slate-task-library/src/components/TasksDataTable.vue index bbd16c483..e439ed559 100644 --- a/static-webapps/slate-task-library/src/components/TasksDataTable.vue +++ b/static-webapps/slate-task-library/src/components/TasksDataTable.vue @@ -14,7 +14,7 @@ :footer-props="{ 'items-per-page-options': [15, 30] }" @update:sort-by="updateSortBy" @update:page="updatePage" - @update:itemsPerPage="updateItemsPerPage" + @update:items-per-page="updateItemsPerPage" > @@ -82,6 +83,14 @@ export default { taskUIStore.selected = taskUIStore.selected.indexOf(row) > -1 ? [] : [row]; }, + onRowDblClick(row) { + const taskUIStore = useTaskUIStore(); + + taskUIStore.selected = + taskUIStore.selected.indexOf(row) > -1 ? [] : [row]; + + taskUIStore.editFormVisible = true; + }, updateSortBy(sortBy) { const taskStore = useTaskStore(); From 7a32eaa335dca3e417ef0bf9fd88673ce7dca008 Mon Sep 17 00:00:00 2001 From: BillClinton Date: Mon, 27 Feb 2023 06:41:43 -0500 Subject: [PATCH 056/194] refactor: ensure asyn methos return result --- .../src/plugins/slateapi.js | 40 +++++++++---------- 1 file changed, 20 insertions(+), 20 deletions(-) diff --git a/static-webapps/slate-task-library/src/plugins/slateapi.js b/static-webapps/slate-task-library/src/plugins/slateapi.js index a37304961..eca53671b 100644 --- a/static-webapps/slate-task-library/src/plugins/slateapi.js +++ b/static-webapps/slate-task-library/src/plugins/slateapi.js @@ -45,7 +45,7 @@ const methods = { me.loading = true; - await axios + const response = await axios .post( me.getRequestUrl(`${me.path}/save`), { @@ -53,23 +53,22 @@ const methods = { }, me.getRequestHeaders() ) - .then(({ data: res }) => { - me.loading = false; - me.data.unshift(res.data[0]); - return { success: res.success, data: res.data }; - }) .catch((error) => { console.log(error); me.loading = false; return error; }); + + me.loading = false; + me.data.unshift(response.data.data[0]); + return { success: response.data.success, data: response.data.data }; }, async update(payload) { const me = this; me.loading = true; - await axios + const response = await axios .post( me.getRequestUrl(`${me.path}/save`), { @@ -77,40 +76,41 @@ const methods = { }, me.getRequestHeaders() ) - .then(({ data: res }) => { - me.loading = false; - const record = me.data.filter((item) => item.ID === res.data[0].ID)[0]; - - Object.assign(record, res.data[0]); - return { success: res.success, data: res.data }; - }) .catch((error) => { console.log(error); me.loading = false; return error; }); + + me.loading = false; + + const record = me.data.filter( + (item) => item.ID === response.data.data[0].ID + )[0]; + + Object.assign(record, response.data.data[0]); + return { success: response.data.success, data: record }; }, async destroy(itemID) { const me = this; me.loading = true; - await axios + const response = await axios .post( me.getRequestUrl(`${me.path}/destroy`), { data: [{ ID: itemID }] }, me.getRequestHeaders() ) - .then(({ data: res }) => { - me.loading = false; - me.data = me.data.filter((rec) => rec.ID !== itemID); - return { success: res.success }; - }) .catch((error) => { console.log(error); me.loading = false; return error; }); + + me.loading = false; + me.data = me.data.filter((rec) => rec.ID !== itemID); + return { success: response.data.success, data: response.data.data }; }, transformData(data) { return data; From b5b9c5b26f4a02eaf240d7a22c7cb887b5d3c3bb Mon Sep 17 00:00:00 2001 From: BillClinton Date: Mon, 27 Feb 2023 06:42:39 -0500 Subject: [PATCH 057/194] feat: add toast confirmations for api operations --- .../src/components/DeleteConfirmation.vue | 8 +++- .../src/components/TaskForm.vue | 15 ++++++- .../src/components/TaskLibrary.vue | 2 + .../src/components/ToastSnackbar.vue | 42 +++++++++++++++++++ .../src/stores/TaskUIStore.js | 8 ++++ 5 files changed, 71 insertions(+), 4 deletions(-) create mode 100644 static-webapps/slate-task-library/src/components/ToastSnackbar.vue diff --git a/static-webapps/slate-task-library/src/components/DeleteConfirmation.vue b/static-webapps/slate-task-library/src/components/DeleteConfirmation.vue index 3780eae98..d99dbc764 100644 --- a/static-webapps/slate-task-library/src/components/DeleteConfirmation.vue +++ b/static-webapps/slate-task-library/src/components/DeleteConfirmation.vue @@ -35,7 +35,7 @@ export default { taskUIStore = useTaskUIStore(), { selected } = storeToRefs(taskUIStore); - return { selected, taskStore }; + return { selected, taskStore, taskUIStore }; }, data() { return { @@ -54,9 +54,13 @@ export default { }, methods: { confirmDelete() { - this.taskStore.destroy(this.task.ID).then(() => { + this.taskStore.destroy(this.task.ID).then((result) => { this.selected = []; this.dialog = false; + console.log(result); + if (result && result.success === true) { + this.taskUIStore.toast("task deleted successfully"); + } }); }, }, diff --git a/static-webapps/slate-task-library/src/components/TaskForm.vue b/static-webapps/slate-task-library/src/components/TaskForm.vue index 97523f3f7..0e50c0871 100644 --- a/static-webapps/slate-task-library/src/components/TaskForm.vue +++ b/static-webapps/slate-task-library/src/components/TaskForm.vue @@ -220,11 +220,19 @@ export default { } }, create() { - this.taskStore.create(this.fields).then(() => { + this.taskStore.create(this.fields).then((result) => { this.reset(); this.dialog = false; + if (result && result.success === true) { + this.toast("task created successfully"); + } }); }, + toast(msg) { + const taskUIStore = useTaskUIStore(); + + taskUIStore.toast(msg); + }, update() { const me = this, fields = me.fields, @@ -243,9 +251,12 @@ export default { if (Object.keys(changes).length !== 0) { const payload = Object.assign({ ID: task.ID }, changes); - this.taskStore.update(payload).then(() => { + this.taskStore.update(payload).then((result) => { this.reset(); this.dialog = false; + if (result && result.success === true) { + this.toast("task updated successfully"); + } }); } this.reset(); diff --git a/static-webapps/slate-task-library/src/components/TaskLibrary.vue b/static-webapps/slate-task-library/src/components/TaskLibrary.vue index cabd72121..75ce55dea 100644 --- a/static-webapps/slate-task-library/src/components/TaskLibrary.vue +++ b/static-webapps/slate-task-library/src/components/TaskLibrary.vue @@ -1,4 +1,5 @@ - diff --git a/static-webapps/slate-task-library/src/machines/AttachmentFieldMachine.js b/static-webapps/slate-task-library/src/machines/AttachmentFieldMachine.js new file mode 100644 index 000000000..59797d55f --- /dev/null +++ b/static-webapps/slate-task-library/src/machines/AttachmentFieldMachine.js @@ -0,0 +1,129 @@ +import { createMachine, assign } from "xstate"; + +const AttachmentFieldMachine = + /** @xstate-layout N4IgpgJg5mDOIC5QEEAuqCGBjAFgWzADtUAxASzABsIBZbHMwsAOjIkrAGIBJAOW4AqAbQAMAXUSgADgHtYZVGRmFJIAB6IAtAGYAbACZmu48f0iAnAHYALAFZdAGhABPRJcPmrI69YAc17W0ARnNfAF8wpzRMXAJicipaekYWNg5OAFEAEUFRCSQQWXlFZVUNBCC9Zm19XyD9e30avU8nVwRLS2r3ESDba10RW28RfQio9Ho40gpqOlwU1nYuZCysvNUihSUVAvLK3WZrS21zW07R-UtdSzatE+7hvybjesrxkGipohnE+YYmEt0gAlDI0ADyADUMhsClsSrtQOVNAMgkZjJYRCIaiIbGc7ghNL5fMwsViQsTbH1tL5bB8vrEfgk5slAWkuKCAMoCcGg2HSOTbUp7LQ1NFkrG2bSWcx9SoEzRBXS2aqBQKWfxS0LmemTRnxWZJBaAyDbQhQTgAVQACllkAIYeJNoKEWUtFLmCczuZauYRLprErzASgjLSb41X67J1OrpdTF8EzDf9FqbFObOABhZC8TMZAAy-MKLp2bsJVOYEcC1n0xj8umJ2gJwTRDTJFP0AQbccinz1iYNf1ZLAwEAgjAtmdB9sd+QFxVLIsJ12YSpuQTqWts9kcLi0QV6zE8nkxZjlxh1H0IMggcFUDIHvxZxrAzoXwqR7u0KpMNwMZmsERiQVBouguYlAJMIZLwmBNpmZI0AVSZY3yFRF1C0Pwul-a59AAoDgz3CpAKOSoTmGMUG2seNvkHZ8kOYNMJ1Q10lz6ElzGlHxzF0HifQjAl9A3I4ZRCa5ZVsTxfB7WDaKfRDFlHcdzRYxdPwqWwOK46w+N42omyIxVMWYK4gM3UzURkvs4KTIcX2YJgAHcAAJYEwVAwGcoJVI-DDCU7QxfwMCwbHsbEFQ9C8AwjKsdyVCIIiAA */ + + /** @xstate-layout N4IgpgJg5mDOIC5QEEAuqCGBjAFgWzADtUAxASzABsIBZbHMwsAOgCcwMIBPAYgEkAcnwAqAbQAMAXUSgADgHtYZVGXmEZIAB6IAtAGYATADZmAdlPiAHJfEBOA6YN2AjABoQXRAYCsp5nsdxB3E9PWdLZwAWAF9o9zRMXAJicipaekYWdk5eAFEAEREJaSQQBSUVNQ1tBGc9E0MInyMDQ3rbW3dPBHN-QOdvSKNxb3FIoNj49Hpk0gpqOlxMtg5uHmR8-OKNcuVVdVKaupNI0z1bXwsDByNTLt0zvtHIy1ajI2cDOsmQBJmiOZpRYMJgrHI8ABKuRoAHkAGq5balXaVA6gGo6IbOZjvW7iEJOUyRC73BA6azMfH45y2azeAZ6SzeH5-JIA1ILDKg7JrKEAZWEMKhSLkij2VUOukM2Kp+O8AVsAzqpJ0ziM3n8oVCpkskXltNsLOmbJS83SS1BkD2hCgPAAqgAFfLIYSIqQ7MWo6q6eVmc7eeyWWziIyRNWdDyIZymWyUyxa4N68zmIxGxL4dlm4HLK0qG08ADCyAEBdyABkRWVPftvWT6cx46FIsZQ5YjNY9KSwtifFSaa9IvU22n-qagVyWJwIIxbQWoS63SVRRUa5KyaYTGrbuEGRdvO8Vc5xNiOh0rsf6e9DT9CPIIHANKyM2PORawB6VxL0T7TpS+wZXm8bwDEiFUfD8cwrF1EN3hGa8pnTWYOXNEEWDICBKHfZFqy-LRdGJWNZU+QDgNAyNaluMxTmcI8mlscZbFMEcTUBV9ULBbgP3FNE8LJL5xE1BMXjxXU7nI8JNRCS8t0HRkYjiX5jWfViUJzac8ygLivTXAZLGYWwAkiYkjFsEyAM7civj005FUYkyBg6YcFKfJCswnZgpxnLTV2-WpvD0gyiWM0zAws7pVQsZhgmsAZgixVNYmiIA */ + createMachine( + { + id: "AttachmentFieldMachine", + initial: "idle", + predictableActionArguments: true, + context: { + value: [], + fields: { + Title: null, + URL: null, + Status: "normal", + }, + }, + states: { + idle: { + on: { + INIT: { + target: "ready", + actions: "initialize", + }, + }, + }, + + ready: { + on: { + EDIT: { + target: "editing", + actions: "editItem", + }, + + ADD: { + target: "adding", + actions: "addItem", + }, + + REMOVE: { + target: "ready", + actions: "removeItem", + }, + + RESTORE: { + target: "ready", + actions: "restoreItem", + }, + + RESET: { + target: "idle", + actions: "resetContext", + }, + }, + }, + + editing: { + on: { + UPDATE: { + target: "ready", + actions: "updateItem", + }, + CANCEL: "ready", + }, + }, + + adding: { + on: { + CREATE: { + target: "ready", + actions: "createItem", + }, + CANCEL: "ready", + }, + }, + }, + }, + { + actions: { + initialize: assign((context, event) => ({ value: event.value })), + addItem: assign(() => ({ fields: { Title: null, URL: null } })), + editItem: assign((context, event) => ({ + fields: { + Title: context.value[event.idx].Title, + URL: context.value[event.idx].URL, + }, + key: event.idx, + })), + removeItem: (context, event) => { + const attachment = context.value[event.idx]; + + Object.assign(attachment, { Status: "removed" }); + }, + restoreItem: (context, event) => { + const attachment = context.value[event.idx]; + + Object.assign(attachment, { Status: "normal" }); + }, + updateItem: (context) => { + const attachment = context.value[context.key]; + + Object.assign(attachment, context.fields); + }, + createItem: assign((context) => ({ + value: context.value.concat([ + Object.assign( + { + Class: "Slate\\CBL\\Tasks\\Attachments\\Link", + Status: "normal", + }, + context.fields + ), + ]), + })), + resetContext: assign(() => ({ + value: [], + fields: { + Title: null, + URL: null, + Status: "normal", + }, + })), + }, + } + ); + +export default AttachmentFieldMachine; From da8e30475caa00623d6abc6457c2359a57166e16 Mon Sep 17 00:00:00 2001 From: BillClinton Date: Wed, 1 Mar 2023 14:57:35 -0500 Subject: [PATCH 062/194] fix: only display unremoved attachments in details --- .../slate-task-library/src/components/TaskDetails.vue | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/static-webapps/slate-task-library/src/components/TaskDetails.vue b/static-webapps/slate-task-library/src/components/TaskDetails.vue index 47eb2de91..088da3f79 100644 --- a/static-webapps/slate-task-library/src/components/TaskDetails.vue +++ b/static-webapps/slate-task-library/src/components/TaskDetails.vue @@ -7,7 +7,7 @@ Attachments
    -
  • +
  • {{ attachment.Title }} @@ -42,6 +42,13 @@ export default { return selected && selected.length > 0 ? selected[0].value : null; }, + activeAttachments() { + const attachments = this.task.Attachments; + + return ( + attachments && attachments.filter((item) => item.Status !== "removed") + ); + }, }, }; From 6d59b6269a37199c53d329baffed9540cfd05e31 Mon Sep 17 00:00:00 2001 From: BillClinton Date: Wed, 1 Mar 2023 14:58:34 -0500 Subject: [PATCH 063/194] fix: adjust machine layout visulaization --- .../slate-task-library/src/machines/AttachmentFieldMachine.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/static-webapps/slate-task-library/src/machines/AttachmentFieldMachine.js b/static-webapps/slate-task-library/src/machines/AttachmentFieldMachine.js index 59797d55f..55e5c6c4d 100644 --- a/static-webapps/slate-task-library/src/machines/AttachmentFieldMachine.js +++ b/static-webapps/slate-task-library/src/machines/AttachmentFieldMachine.js @@ -3,7 +3,7 @@ import { createMachine, assign } from "xstate"; const AttachmentFieldMachine = /** @xstate-layout N4IgpgJg5mDOIC5QEEAuqCGBjAFgWzADtUAxASzABsIBZbHMwsAOjIkrAGIBJAOW4AqAbQAMAXUSgADgHtYZVGRmFJIAB6IAtAGYAbACZmu48f0iAnAHYALAFZdAGhABPRJcPmrI69YAc17W0ARnNfAF8wpzRMXAJicipaekYWNg5OAFEAEUFRCSQQWXlFZVUNBCC9Zm19XyD9e30avU8nVwRLS2r3ESDba10RW28RfQio9Ho40gpqOlwU1nYuZCysvNUihSUVAvLK3WZrS21zW07R-UtdSzatE+7hvybjesrxkGipohnE+YYmEt0gAlDI0ADyADUMhsClsSrtQOVNAMgkZjJYRCIaiIbGc7ghNL5fMwsViQsTbH1tL5bB8vrEfgk5slAWkuKCAMoCcGg2HSOTbUp7LQ1NFkrG2bSWcx9SoEzRBXS2aqBQKWfxS0LmemTRnxWZJBaAyDbQhQTgAVQACllkAIYeJNoKEWUtFLmCczuZauYRLprErzASgjLSb41X67J1OrpdTF8EzDf9FqbFObOABhZC8TMZAAy-MKLp2bsJVOYEcC1n0xj8umJ2gJwTRDTJFP0AQbccinz1iYNf1ZLAwEAgjAtmdB9sd+QFxVLIsJ12YSpuQTqWts9kcLi0QV6zE8nkxZjlxh1H0IMggcFUDIHvxZxrAzoXwqR7u0KpMNwMZmsERiQVBouguYlAJMIZLwmBNpmZI0AVSZY3yFRF1C0Pwul-a59AAoDgz3CpAKOSoTmGMUG2seNvkHZ8kOYNMJ1Q10lz6ElzGlHxzF0HifQjAl9A3I4ZRCa5ZVsTxfB7WDaKfRDFlHcdzRYxdPwqWwOK46w+N42omyIxVMWYK4gM3UzURkvs4KTIcX2YJgAHcAAJYEwVAwGcoJVI-DDCU7QxfwMCwbHsbEFQ9C8AwjKsdyVCIIiAA */ - /** @xstate-layout N4IgpgJg5mDOIC5QEEAuqCGBjAFgWzADtUAxASzABsIBZbHMwsAOgCcwMIBPAYgEkAcnwAqAbQAMAXUSgADgHtYZVGXmEZIAB6IAtAGYATADZmAdlPiAHJfEBOA6YN2AjABoQXRAYCsp5nsdxB3E9PWdLZwAWAF9o9zRMXAJicipaekYWdk5eAFEAEREJaSQQBSUVNQ1tBGc9E0MInyMDQ3rbW3dPBHN-QOdvSKNxb3FIoNj49Hpk0gpqOlxMtg5uHmR8-OKNcuVVdVKaupNI0z1bXwsDByNTLt0zvtHIy1ajI2cDOsmQBJmiOZpRYMJgrHI8ABKuRoAHkAGq5balXaVA6gGo6IbOZjvW7iEJOUyRC73BA6azMfH45y2azeAZ6SzeH5-JIA1ILDKg7JrKEAZWEMKhSLkij2VUOukM2Kp+O8AVsAzqpJ0ziM3n8oVCpkskXltNsLOmbJS83SS1BkD2hCgPAAqgAFfLIYSIqQ7MWo6q6eVmc7eeyWWziIyRNWdDyIZymWyUyxa4N68zmIxGxL4dlm4HLK0qG08ADCyAEBdyABkRWVPftvWT6cx46FIsZQ5YjNY9KSwtifFSaa9IvU22n-qagVyWJwIIxbQWoS63SVRRUa5KyaYTGrbuEGRdvO8Vc5xNiOh0rsf6e9DT9CPIIHANKyM2PORawB6VxL0T7TpS+wZXm8bwDEiFUfD8cwrF1EN3hGa8pnTWYOXNEEWDICBKHfZFqy-LRdGJWNZU+QDgNAyNaluMxTmcI8mlscZbFMEcTUBV9ULBbgP3FNE8LJL5xE1BMXjxXU7nI8JNRCS8t0HRkYjiX5jWfViUJzac8ygLivTXAZLGYWwAkiYkjFsEyAM7civj005FUYkyBg6YcFKfJCswnZgpxnLTV2-WpvD0gyiWM0zAws7pVQsZhgmsAZgixVNYmiIA */ + /** @xstate-layout N4IgpgJg5mDOIC5QEEAuqCGBjAFgWzADtUAxASzABsIBZbHMwsAOjIkrAGIBJAOW4AqAbQAMAXUSgADgHtYZVGRmFJIAB6IAtACYAnAGZmI4yICM2gBzaArNe0AWADQgAnlr2nm++6d3bTAOw+Fvb6AGz6AL6RzmiYuATE5FS09IwsAE5gGBAunACiACKCohJIILLyisqqGgimYczWFvoWbfoBIaY+AfrObgjWAcy6IvYBBvpmQ9b22tGx6PSJpBTUdLjpzFk5eciFhaWqlQpKKuV12oY+psb6+rq64+NX-Vr6ptbMNq32YboBEQGCZhBYgOLLIirFIbBhMbbZXKcABK+RoAHkAGr5I7lE7Vc6gOqaVqNPxzIJhNoBIYWN4ITSmFrMMLjVkiD5hBqWexgiEJKHJdZpeE7JGogDKAnRqNx0jkpxqF3eFkaIlm9gM9msugsDScrncjQCn1MnNZgOs+itfKWAqSa1Sm1FiLykvywnExwVBNq7n02hGYSpVqelpE2npJMezACYU6weaFl1BlBMXBdvwgsdsK2kFOhCgnAAqgAFQrIAQ4r14n1nP31P4sywTGm6OwtNpR7yxwKtbpWzqatOLeJZh0wkUsfOKQucADCyF48-yABk5RU60qiYgGo1vICxrMHA9dPTPo07EN4+Y2tZWfN0-zx9Dhc6WDkIIwi-PUZXq2U8pVPWyqNhYTTWhyATaBGNifJGhoMjBIixuE2jxtYxh+Noj6jpCE5vnCH4QF+c6Lsua4bviIE7vUwZeOMxjanMoSPN2qrMEy3TAmEIgtNE6aEDIEBwKoz4rEKTpEd6wHbuoWjjF8Qx6FymG6kMphRvYFjDOhCYPA4MEAlET6ZhJOZTqw7BgDJiqEvJDIUk00G6KpQIWBp3ZmAxHkBJ0nSzKYDS2mO5mTu+CK7LZvqgYy6HMDp0H2PY6ras0vhRiERgfNamHNDBeghfhr5SXmX6zlA0U0Q5e5NLYAbaf46rmAhAwcehEZ6phjV+bhGahdm4VEcwn7flVcl1LVthWg4Vi3NYLVeZ43geTpBh+OYgQCZEQA */ createMachine( { id: "AttachmentFieldMachine", From 032938fe480e95784ab45cee822b8738480f37df Mon Sep 17 00:00:00 2001 From: BillClinton Date: Wed, 1 Mar 2023 15:00:41 -0500 Subject: [PATCH 064/194] feat: use deep equal for record changes --- .../slate-task-library/src/components/TaskForm.vue | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/static-webapps/slate-task-library/src/components/TaskForm.vue b/static-webapps/slate-task-library/src/components/TaskForm.vue index 0e50c0871..952e0ac25 100644 --- a/static-webapps/slate-task-library/src/components/TaskForm.vue +++ b/static-webapps/slate-task-library/src/components/TaskForm.vue @@ -86,6 +86,7 @@ @@ -121,6 +122,7 @@ import DateField from "@/components/fields/DateField.vue"; import AttachmentField from "@/components/fields/AttachmentField.vue"; import { storeToRefs } from "pinia"; import { ref } from "vue"; +import { isEqual, cloneDeep } from "lodash"; export default { components: { @@ -155,7 +157,7 @@ export default { data() { return { fields: { - Attachments: [], + Attachments: null, ExpirationDate: null, DueDate: null, ExperienceType: "", @@ -166,6 +168,7 @@ export default { }, editKey: false, loadingParentTasks: false, + originalTask: null, }; }, computed: { @@ -193,6 +196,8 @@ export default { parentTaskStore = useParentTaskStore(), parentTask = me.selected[0].value.ParentTask; + me.originalTask = cloneDeep(me.selected[0].value); + /** * TODO: we need the combo store to contain the value of the current parent task, but there's probably a better way to do this. * can we query api by the parent task ID? @@ -236,10 +241,10 @@ export default { update() { const me = this, fields = me.fields, - task = me.task, + task = me.originalTask, changes = Object.fromEntries( Object.entries(fields).filter( - ([key, val]) => key in task && task[key] !== val + ([key, val]) => key in task && !isEqual(task[key], val) ) ); From 85296a075190f74fe617cde1345bab223bd3d64a Mon Sep 17 00:00:00 2001 From: BillClinton Date: Wed, 1 Mar 2023 17:35:34 -0500 Subject: [PATCH 065/194] feat: fix/re-enable attachment form validation --- .../src/components/fields/AttachmentField.vue | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/static-webapps/slate-task-library/src/components/fields/AttachmentField.vue b/static-webapps/slate-task-library/src/components/fields/AttachmentField.vue index 00dc8e3ba..d6f4df54a 100644 --- a/static-webapps/slate-task-library/src/components/fields/AttachmentField.vue +++ b/static-webapps/slate-task-library/src/components/fields/AttachmentField.vue @@ -45,7 +45,7 @@ - + {{ dialogTitle }} @@ -64,17 +64,19 @@ Add Update From 220e24e4a01bb4aec48337420f4e4272648ed3d9 Mon Sep 17 00:00:00 2001 From: BillClinton Date: Thu, 2 Mar 2023 02:11:10 -0500 Subject: [PATCH 066/194] fix: send a copy of record to form break reactivity so form changes don't affect original record --- .../slate-task-library/src/components/TaskForm.vue | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/static-webapps/slate-task-library/src/components/TaskForm.vue b/static-webapps/slate-task-library/src/components/TaskForm.vue index 952e0ac25..4fedc4118 100644 --- a/static-webapps/slate-task-library/src/components/TaskForm.vue +++ b/static-webapps/slate-task-library/src/components/TaskForm.vue @@ -121,8 +121,8 @@ import { useSkillStore } from "@/stores/SkillStore.js"; import DateField from "@/components/fields/DateField.vue"; import AttachmentField from "@/components/fields/AttachmentField.vue"; import { storeToRefs } from "pinia"; -import { ref } from "vue"; -import { isEqual, cloneDeep } from "lodash"; +import { ref, toRaw } from "vue"; +import { isEqual } from "lodash"; export default { components: { @@ -168,7 +168,7 @@ export default { }, editKey: false, loadingParentTasks: false, - originalTask: null, + taskCopy: null, }; }, computed: { @@ -196,7 +196,7 @@ export default { parentTaskStore = useParentTaskStore(), parentTask = me.selected[0].value.ParentTask; - me.originalTask = cloneDeep(me.selected[0].value); + me.taskCopy = toRaw(me.selected[0]); /** * TODO: we need the combo store to contain the value of the current parent task, but there's probably a better way to do this. @@ -211,7 +211,7 @@ export default { for (const field in me.fields) { if (Object.prototype.hasOwnProperty.call(me.fields, field)) { - me.fields[field] = me.selected[0].value[field]; + me.fields[field] = me.taskCopy.value[field]; } } }, From 3934a3a73f18773d391b69c99de98b42bbd26ca5 Mon Sep 17 00:00:00 2001 From: BillClinton Date: Thu, 2 Mar 2023 02:29:16 -0500 Subject: [PATCH 067/194] fix: correct object copying --- .../slate-task-library/src/components/TaskForm.vue | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/static-webapps/slate-task-library/src/components/TaskForm.vue b/static-webapps/slate-task-library/src/components/TaskForm.vue index 4fedc4118..d13102540 100644 --- a/static-webapps/slate-task-library/src/components/TaskForm.vue +++ b/static-webapps/slate-task-library/src/components/TaskForm.vue @@ -168,6 +168,7 @@ export default { }, editKey: false, loadingParentTasks: false, + originalTask: null, taskCopy: null, }; }, @@ -196,7 +197,8 @@ export default { parentTaskStore = useParentTaskStore(), parentTask = me.selected[0].value.ParentTask; - me.taskCopy = toRaw(me.selected[0]); + me.originalTask = JSON.parse(JSON.stringify(me.selected[0].value)); + me.taskCopy = JSON.parse(JSON.stringify(me.selected[0].value)); /** * TODO: we need the combo store to contain the value of the current parent task, but there's probably a better way to do this. @@ -211,7 +213,7 @@ export default { for (const field in me.fields) { if (Object.prototype.hasOwnProperty.call(me.fields, field)) { - me.fields[field] = me.taskCopy.value[field]; + me.fields[field] = me.taskCopy[field]; } } }, From 3b18071d1d7848e33d0b7c30f0fb3f39c473a212 Mon Sep 17 00:00:00 2001 From: BillClinton Date: Thu, 2 Mar 2023 02:31:03 -0500 Subject: [PATCH 068/194] feat: add tooltips and make icons real buttons --- .../src/components/fields/AttachmentField.vue | 69 +++++++++++++------ 1 file changed, 48 insertions(+), 21 deletions(-) diff --git a/static-webapps/slate-task-library/src/components/fields/AttachmentField.vue b/static-webapps/slate-task-library/src/components/fields/AttachmentField.vue index d6f4df54a..28ef320dd 100644 --- a/static-webapps/slate-task-library/src/components/fields/AttachmentField.vue +++ b/static-webapps/slate-task-library/src/components/fields/AttachmentField.vue @@ -24,20 +24,45 @@ (removed) - - - + + + + + +
@@ -45,7 +70,7 @@ - + {{ dialogTitle }} @@ -64,19 +89,17 @@ Add Update @@ -190,7 +213,7 @@ li { display: flex; align-items: right; width: 100%; - margin: 2px; + margin-top: 4px; } li > span.link { @@ -208,6 +231,10 @@ li > span.removed { } li > span.actions { text-align: right; - width: 50px; + width: 60px; +} +.tinybutton { + font-size: 8px; + margin-left: 8px; } From 6e9b0bac61f7465cadc528bcc4242041b9970e8f Mon Sep 17 00:00:00 2001 From: BillClinton Date: Thu, 2 Mar 2023 02:34:19 -0500 Subject: [PATCH 069/194] fix: unify button colors --- .../src/components/DeleteConfirmation.vue | 4 ++-- .../src/components/fields/AttachmentField.vue | 10 +++------- 2 files changed, 5 insertions(+), 9 deletions(-) diff --git a/static-webapps/slate-task-library/src/components/DeleteConfirmation.vue b/static-webapps/slate-task-library/src/components/DeleteConfirmation.vue index d99dbc764..e4ef8cbce 100644 --- a/static-webapps/slate-task-library/src/components/DeleteConfirmation.vue +++ b/static-webapps/slate-task-library/src/components/DeleteConfirmation.vue @@ -13,10 +13,10 @@ {{ title }} - + Delete - + Cancel diff --git a/static-webapps/slate-task-library/src/components/fields/AttachmentField.vue b/static-webapps/slate-task-library/src/components/fields/AttachmentField.vue index 28ef320dd..1c7c1dc26 100644 --- a/static-webapps/slate-task-library/src/components/fields/AttachmentField.vue +++ b/static-webapps/slate-task-library/src/components/fields/AttachmentField.vue @@ -89,7 +89,7 @@ @@ -97,17 +97,13 @@ Update - + Cancel From cea06b52eea7b5c61c047f89350f2e1a32d87b0e Mon Sep 17 00:00:00 2001 From: BillClinton Date: Thu, 2 Mar 2023 17:52:38 -0500 Subject: [PATCH 070/194] feat: add colors and lengthen timeout of toasts --- .../slate-task-library/src/components/ToastSnackbar.vue | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/static-webapps/slate-task-library/src/components/ToastSnackbar.vue b/static-webapps/slate-task-library/src/components/ToastSnackbar.vue index faff4284b..bb58bfb16 100644 --- a/static-webapps/slate-task-library/src/components/ToastSnackbar.vue +++ b/static-webapps/slate-task-library/src/components/ToastSnackbar.vue @@ -3,7 +3,7 @@ ({ - timeout: 2000, + timeout: 4000, }), }; From 51201a833b538b038ef78c27e51960f5678c16ee Mon Sep 17 00:00:00 2001 From: BillClinton Date: Thu, 2 Mar 2023 17:54:05 -0500 Subject: [PATCH 071/194] fix: correct validation on attachment form --- .../src/components/fields/AttachmentField.vue | 17 +++++++++++++++-- 1 file changed, 15 insertions(+), 2 deletions(-) diff --git a/static-webapps/slate-task-library/src/components/fields/AttachmentField.vue b/static-webapps/slate-task-library/src/components/fields/AttachmentField.vue index 1c7c1dc26..1b8abcd57 100644 --- a/static-webapps/slate-task-library/src/components/fields/AttachmentField.vue +++ b/static-webapps/slate-task-library/src/components/fields/AttachmentField.vue @@ -91,7 +91,7 @@ v-if="current.matches('adding')" color="primary" variant="text" - @click="service.send('CREATE')" + @click="submit" > Add @@ -99,7 +99,7 @@ v-if="current.matches('editing')" color="primary" variant="text" - @click="service.send('UPDATE')" + @click="submit" > Update @@ -180,6 +180,19 @@ export default { .start(); }, methods: { + submit() { + const me = this; + + me.$refs.attachmentform.validate().then((result) => { + if (result.valid && result.valid === true) { + if (me.editMode) { + me.service.send("UPDATE"); + } else { + me.service.send("CREATE"); + } + } + }); + }, isValidURL(urlString) { let givenURL; From a589210da90106a904e6d0f9b64c6cd80fff463c Mon Sep 17 00:00:00 2001 From: BillClinton Date: Thu, 2 Mar 2023 17:54:55 -0500 Subject: [PATCH 072/194] feat: add toast colors to UI state store --- static-webapps/slate-task-library/src/stores/TaskUIStore.js | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/static-webapps/slate-task-library/src/stores/TaskUIStore.js b/static-webapps/slate-task-library/src/stores/TaskUIStore.js index 72d21417d..ecfc69350 100644 --- a/static-webapps/slate-task-library/src/stores/TaskUIStore.js +++ b/static-webapps/slate-task-library/src/stores/TaskUIStore.js @@ -6,11 +6,13 @@ export const useTaskUIStore = defineStore("taskUIStore", { editFormVisible: false, snackbar: false, snackbarMsg: false, + snackbarColor: "info", }), actions: { - toast(message) { + toast(message, color) { this.snackbar = true; this.snackbarMsg = message; + this.snackbarColor = color ? color : "info"; }, }, }); From ccc05ffe3638cb80113379b4b185f189622bb4eb Mon Sep 17 00:00:00 2001 From: BillClinton Date: Thu, 2 Mar 2023 18:05:08 -0500 Subject: [PATCH 073/194] feat: implement validation and refactor update --- .../src/components/TaskForm.vue | 94 ++++++++++++------- .../src/plugins/slateapi.js | 68 ++++++++++++-- 2 files changed, 120 insertions(+), 42 deletions(-) diff --git a/static-webapps/slate-task-library/src/components/TaskForm.vue b/static-webapps/slate-task-library/src/components/TaskForm.vue index d13102540..4d58492d5 100644 --- a/static-webapps/slate-task-library/src/components/TaskForm.vue +++ b/static-webapps/slate-task-library/src/components/TaskForm.vue @@ -15,7 +15,7 @@ @@ -99,11 +99,25 @@ - - Close + + + Update + + + Create - - {{ submitButtonLabel }} + + Close @@ -121,7 +135,7 @@ import { useSkillStore } from "@/stores/SkillStore.js"; import DateField from "@/components/fields/DateField.vue"; import AttachmentField from "@/components/fields/AttachmentField.vue"; import { storeToRefs } from "pinia"; -import { ref, toRaw } from "vue"; +import { ref } from "vue"; import { isEqual } from "lodash"; export default { @@ -166,10 +180,12 @@ export default { Skills: [], Title: "", }, - editKey: false, loadingParentTasks: false, originalTask: null, taskCopy: null, + + // Validation rule for Title field + titleRules: [(v) => Boolean(v) || "Title is required"], }; }, computed: { @@ -220,11 +236,15 @@ export default { submit() { const me = this; - if (me.editMode) { - me.update(); - } else { - me.create(); - } + me.$refs.taskform.validate().then((result) => { + if (result.valid && result.valid === true) { + if (me.editMode) { + me.update(); + } else { + me.create(); + } + } + }); }, create() { this.taskStore.create(this.fields).then((result) => { @@ -235,39 +255,26 @@ export default { } }); }, - toast(msg) { - const taskUIStore = useTaskUIStore(); - - taskUIStore.toast(msg); - }, update() { const me = this, - fields = me.fields, task = me.originalTask, - changes = Object.fromEntries( - Object.entries(fields).filter( - ([key, val]) => key in task && !isEqual(task[key], val) - ) - ); - - // Convert skills to an array of string skill codes - if (changes.Skills) { - changes.Skills = changes.Skills.map((skill) => skill.Code); - } + changes = me.getRecordChanges(); - if (Object.keys(changes).length !== 0) { + if (Object.keys(changes).length > 0) { const payload = Object.assign({ ID: task.ID }, changes); this.taskStore.update(payload).then((result) => { this.reset(); this.dialog = false; if (result && result.success === true) { - this.toast("task updated successfully"); + this.toast("task updated successfully", "success"); + } else { + this.toast(result.message, "error"); } }); + } else { + this.toast("task unmodified: no changes to save", "warning"); } - this.reset(); - this.dialog = false; }, cancel() { const me = this; @@ -279,6 +286,11 @@ export default { this.$refs.taskform.reset(); } }, + toast(msg, color = "info") { + const taskUIStore = useTaskUIStore(); + + taskUIStore.toast(msg, color); + }, onTaskformToggle() { const me = this; @@ -299,6 +311,24 @@ export default { }); } }, + getRecordChanges() { + const me = this, + fields = me.fields, + task = me.originalTask, + // get the field where the form fields differ from the original record + changes = Object.fromEntries( + Object.entries(fields).filter( + ([key, val]) => key in task && !isEqual(task[key], val) + ) + ); + + // Convert skills to an array of string skill codes + if (changes.Skills) { + changes.Skills = changes.Skills.map((skill) => skill.Code); + } + + return changes; + }, }, }; diff --git a/static-webapps/slate-task-library/src/plugins/slateapi.js b/static-webapps/slate-task-library/src/plugins/slateapi.js index eca53671b..d481b669b 100644 --- a/static-webapps/slate-task-library/src/plugins/slateapi.js +++ b/static-webapps/slate-task-library/src/plugins/slateapi.js @@ -6,6 +6,7 @@ */ import axios from "axios"; import { toRef, ref } from "vue"; +import { isEqual } from "lodash"; const props = { data: [], @@ -63,12 +64,33 @@ const methods = { me.data.unshift(response.data.data[0]); return { success: response.data.success, data: response.data.data }; }, - async update(payload) { + async update(updates, original) { const me = this; me.loading = true; - const response = await axios + const payload = updates; + + /** + * ?? implement this later ?? + * seems like it would be useful to just be able to send changes and optionally the original record + * and let this method construct the payload, but with tasks I need to transform the data anyway, + * specifically Skills, so I wouldn't need it right now. + * TODO: create a skills field component that returns the value needed for the API update then implement this? + */ + // if (original) { + // payload = Object.fromEntries( + // Object.entries(updates).filter( + // ([key, val]) => key in original && !isEqual(original[key], val) + // ) + // ); + // } + + let success = false; + let data, + message = null; + + await axios .post( me.getRequestUrl(`${me.path}/save`), { @@ -76,20 +98,46 @@ const methods = { }, me.getRequestHeaders() ) + .then((res) => { + let updatedRecord = null; + + if (res.data) { + success = res.data.success; + message = res.data.message; + } + + if (success === true) { + // retrieve the updated record from the response + if (res.data && res.data.data && res.data.data.length === 1) { + updatedRecord = res.data.data[0]; + } + + if (updatedRecord && updatedRecord.ID) { + // find index of returned record in current data array + const idx = me.data.findIndex((rec) => rec.ID === updatedRecord.ID); + + // update the record in the current data array + if (idx > -1) { + me.data[idx] = updatedRecord; + me.data.splice(idx, 1, updatedRecord); + } + + data = updatedRecord; + } else { + // updated record was not valid + success = false; + message = "server response did not conain a valid record object"; + } + } + }) .catch((error) => { console.log(error); - me.loading = false; - return error; + message = error.message; }); me.loading = false; - const record = me.data.filter( - (item) => item.ID === response.data.data[0].ID - )[0]; - - Object.assign(record, response.data.data[0]); - return { success: response.data.success, data: record }; + return { success, data, message }; }, async destroy(itemID) { const me = this; From b4c5715b271be8cf68ca5c6fb9d355ab8b614614 Mon Sep 17 00:00:00 2001 From: BillClinton Date: Thu, 2 Mar 2023 18:06:36 -0500 Subject: [PATCH 074/194] fix: prop no longer needed --- .../src/components/fields/AttachmentField.vue | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/static-webapps/slate-task-library/src/components/fields/AttachmentField.vue b/static-webapps/slate-task-library/src/components/fields/AttachmentField.vue index 1b8abcd57..88d569a25 100644 --- a/static-webapps/slate-task-library/src/components/fields/AttachmentField.vue +++ b/static-webapps/slate-task-library/src/components/fields/AttachmentField.vue @@ -70,7 +70,7 @@ - + {{ dialogTitle }} From d4d445b361076ab78167726328da0f33c6ffe189 Mon Sep 17 00:00:00 2001 From: BillClinton Date: Sat, 4 Mar 2023 02:02:42 -0500 Subject: [PATCH 075/194] fix: remove unused import --- static-webapps/slate-task-library/src/plugins/slateapi.js | 1 - 1 file changed, 1 deletion(-) diff --git a/static-webapps/slate-task-library/src/plugins/slateapi.js b/static-webapps/slate-task-library/src/plugins/slateapi.js index d481b669b..5964a1e92 100644 --- a/static-webapps/slate-task-library/src/plugins/slateapi.js +++ b/static-webapps/slate-task-library/src/plugins/slateapi.js @@ -6,7 +6,6 @@ */ import axios from "axios"; import { toRef, ref } from "vue"; -import { isEqual } from "lodash"; const props = { data: [], From c7235b4ee4d845970c40018725160954e21d673b Mon Sep 17 00:00:00 2001 From: BillClinton Date: Sat, 4 Mar 2023 02:03:52 -0500 Subject: [PATCH 076/194] feat: reset on unmount component --- .../src/components/fields/AttachmentField.vue | 3 +++ 1 file changed, 3 insertions(+) diff --git a/static-webapps/slate-task-library/src/components/fields/AttachmentField.vue b/static-webapps/slate-task-library/src/components/fields/AttachmentField.vue index 88d569a25..06aa20363 100644 --- a/static-webapps/slate-task-library/src/components/fields/AttachmentField.vue +++ b/static-webapps/slate-task-library/src/components/fields/AttachmentField.vue @@ -164,6 +164,9 @@ export default { mounted() { this.service.send({ type: "INIT", value: this.modelValue }); }, + unmounted() { + this.service.send({ type: "RESET" }); + }, created() { // Start service on component creation this.service From 565baea6a01c51ffc9ed908735ad65aebd64a7b0 Mon Sep 17 00:00:00 2001 From: BillClinton Date: Sat, 4 Mar 2023 02:04:51 -0500 Subject: [PATCH 077/194] fix: remove unused action --- .../slate-task-library/src/machines/AttachmentFieldMachine.js | 1 - 1 file changed, 1 deletion(-) diff --git a/static-webapps/slate-task-library/src/machines/AttachmentFieldMachine.js b/static-webapps/slate-task-library/src/machines/AttachmentFieldMachine.js index 55e5c6c4d..f4773b6e5 100644 --- a/static-webapps/slate-task-library/src/machines/AttachmentFieldMachine.js +++ b/static-webapps/slate-task-library/src/machines/AttachmentFieldMachine.js @@ -80,7 +80,6 @@ const AttachmentFieldMachine = { actions: { initialize: assign((context, event) => ({ value: event.value })), - addItem: assign(() => ({ fields: { Title: null, URL: null } })), editItem: assign((context, event) => ({ fields: { Title: context.value[event.idx].Title, From 75c9b6aa880cfa05272b0b8dc2634ea70498a348 Mon Sep 17 00:00:00 2001 From: BillClinton Date: Sat, 4 Mar 2023 02:06:16 -0500 Subject: [PATCH 078/194] feat: implement XState for UI state management --- .../src/components/DeleteConfirmation.vue | 42 +++-- .../src/components/TaskDetails.vue | 14 +- .../src/components/TaskForm.vue | 154 +++++++----------- .../src/components/TasksDataTable.vue | 46 +++--- .../src/components/TasksHeader.vue | 43 ++--- .../src/components/ToastSnackbar.vue | 36 ++-- .../src/machines/TasksMachine.js | 135 +++++++++++++++ .../src/machines/logTransition.js | 13 ++ 8 files changed, 315 insertions(+), 168 deletions(-) create mode 100644 static-webapps/slate-task-library/src/machines/TasksMachine.js create mode 100644 static-webapps/slate-task-library/src/machines/logTransition.js diff --git a/static-webapps/slate-task-library/src/components/DeleteConfirmation.vue b/static-webapps/slate-task-library/src/components/DeleteConfirmation.vue index e4ef8cbce..44b3dbb62 100644 --- a/static-webapps/slate-task-library/src/components/DeleteConfirmation.vue +++ b/static-webapps/slate-task-library/src/components/DeleteConfirmation.vue @@ -26,16 +26,21 @@ diff --git a/static-webapps/slate-task-library/src/components/ToastSnackbar.vue b/static-webapps/slate-task-library/src/components/ToastSnackbar.vue index bb58bfb16..1bb29c8cf 100644 --- a/static-webapps/slate-task-library/src/components/ToastSnackbar.vue +++ b/static-webapps/slate-task-library/src/components/ToastSnackbar.vue @@ -1,36 +1,44 @@ diff --git a/static-webapps/slate-task-library/src/machines/TasksMachine.js b/static-webapps/slate-task-library/src/machines/TasksMachine.js new file mode 100644 index 000000000..fbc976433 --- /dev/null +++ b/static-webapps/slate-task-library/src/machines/TasksMachine.js @@ -0,0 +1,135 @@ +/* eslint-disable one-var */ +import { createMachine, interpret, assign } from "xstate"; +import { useActor } from "@xstate/vue"; +import { logTransition } from "./logTransition.js"; + +const TasksMachine = createMachine( + { + /** @xstate-layout N4IgpgJg5mDOIC5QBUCGsDWsCyqDGAFgJYB2YAxMgPICCAysgNoAMAuoqAA4D2sRALkW4kOIAB6IArAE5JAOmkAOAOzSAjGulKAbMuYAWADQgAnogBMi+fpuTzzScrV7pyyQF93xtJhz5iZOQAqgBy1PRMbKI8fILCohIIkor6CgDMzNqa2uYazBrGZgj65uZypaVpksxpaWrmqtqe3uhYuISkYHJEEAA2FACSIQOR7EggMQJCIuOJamnScjL22tpapczmroUW0mULycrm+spH0jXNID5t-p1yAE5gqBAm5HQAogAy7wDCo9G8KbxWaIAC0imYSzSWwW5jSqlqaiMpgs1Tkq10NXqpxs0ku1z8HTIDyeL3IABF3h9vn8WGMuIC4jNQIloWo5Li9NoUslJLVlDsEOY0Ri9HUGspcfjWoSAl1Hs9XjRyeS6QDYtMEhZlHJmK5csc0msFooUoL9Lp0m4jatMnyHNLfO05STFeR3uSRmrxpMmVqhfU5FYZGkLQ5LNDzXpdcxYxbpNpHIpao6bkSus8IKQoG8gj8flS6N6GRrgSywalTZoLRpocLJM5Bdp9GklpJ2-lctoqvoPF4rjLnXdM9nyAAxGgDT7FiaMzUghCgtSmmPcrQLE6m7YohDaAxB02KDRORSJ5ep2XDiBZkg5n40EIF6dRH1zsviMFWDk2fTMCEySRu1Pc1Az-Wp9FNLJVAgi8h2JSAplvXN80LGdfXncsEE0VtTlOU0aiNC07CbFs2w7eo1G7SRe1g254KzQQkInKc0LfZkP2KTQ5COUonCcPY6jUEjW3bciux7PsWidOiugQxi7wfJ9WNLdjWUsOQ6mkCCVCPTEWxAsowNDSDnC0xRPH7EhuAgOBRAJOCwHVIFVLBOFtFXRR1y05QtwFHd5jKHjSmkBZuUyJFaPTbo+kc18VP9eoRPbPdlByHyW1KQUNnKCoDkTVK9TSSKXQVF4nL9BdErIlK0pSaFkSKeFIR-aitKqPlZCaft7JkuQR1vcqMI40Eqjbc4FgMRRzGbPZBUAxZPJkTQEQ0ZxiruOTs0G99Emm+RT1rNQ-1Sk85rWINZHUVwQtW5QLPcIA */ + id: "TasksMachine", + initial: "idle", + predictableActionArguments: true, + context: { + selected: [], + formIsVisible: false, + toastIsVisible: false, + toastMessage: null, + toastColor: "info", + toastTimeout: 4000, + logTransition: true, + }, + // These actions can be performed in any state + on: { + TOAST: { + actions: "toast", + }, + UNTOAST: { + actions: "untoast", + }, + }, + states: { + idle: { + on: { + INIT: { + target: "ready", + }, + }, + }, + + ready: { + on: { + SELECT: { + actions: "select", + }, + + DESELECT: { + actions: "deselect", + }, + + ADD: { + target: "adding", + actions: "deselect", + }, + + EDIT: { + target: "editing", + }, + }, + }, + + adding: { + on: { + SUCCESS: { + actions: "onCreateSuccess", + target: "ready", + }, + FAIL: { + actions: "onFail", + target: "adding", + }, + CANCEL: { + target: "ready", + actions: "cancel", + }, + }, + }, + + editing: { + on: { + SUCCESS: { + actions: "onUpdateSuccess", + target: "ready", + }, + FAIL: { + actions: "onFail", + target: "editing", + }, + CANCEL: { + target: "ready", + actions: "cancel", + }, + }, + }, + }, + }, + { + actions: { + select: assign((context, event) => ({ + selected: [event.row], + })), + deselect: assign(() => ({ + selected: [], + })), + onCreateSuccess: assign(() => ({ + toastIsVisible: true, + toastMessage: "task created successfully", + toastColor: "info", + })), + onUpdateSuccess: assign(() => ({ + toastIsVisible: true, + toastMessage: "task updated successfully", + toastColor: "info", + })), + onFail: assign((context, event) => ({ + toastIsVisible: true, + toastMessage: event.message, + toastColor: "error", + })), + toast: assign((context, event) => ({ + toastIsVisible: true, + toastMessage: event.message, + toastColor: event.color ? event.color : "info", + toastTimeout: event.timeout ? event.timeout : 4000, + })), + untoast: assign(() => ({ + toastIsVisible: false, + })), + }, + } +); + +// Create a service +const service = interpret(TasksMachine).onTransition(logTransition).start(); + +// Create a custom service hook for this machine, that takes the service previously created. +export const useTasksMachine = () => useActor(service); diff --git a/static-webapps/slate-task-library/src/machines/logTransition.js b/static-webapps/slate-task-library/src/machines/logTransition.js new file mode 100644 index 000000000..0d45137a5 --- /dev/null +++ b/static-webapps/slate-task-library/src/machines/logTransition.js @@ -0,0 +1,13 @@ +const logTransition = (state) => { + if (state.context.logTransition) { + console.groupCollapsed( + `[#] StateMachine <${state.machine.id}> transitioned to ${state.value}` + ); + console.log("event: ", state.event); + console.log("state: ", state); + console.log("context: ", state.context); + console.groupEnd(); + } +}; + +export { logTransition }; From 1588ab15efd3de3085ea978dea10652ae9bb5560 Mon Sep 17 00:00:00 2001 From: BillClinton Date: Sat, 4 Mar 2023 02:26:23 -0500 Subject: [PATCH 079/194] chore: remove commented lines --- .../slate-task-library/src/components/DeleteConfirmation.vue | 5 ----- 1 file changed, 5 deletions(-) diff --git a/static-webapps/slate-task-library/src/components/DeleteConfirmation.vue b/static-webapps/slate-task-library/src/components/DeleteConfirmation.vue index 44b3dbb62..e7cd0c2f2 100644 --- a/static-webapps/slate-task-library/src/components/DeleteConfirmation.vue +++ b/static-webapps/slate-task-library/src/components/DeleteConfirmation.vue @@ -27,8 +27,6 @@