From efd8ac2ab9f2011df9e8b4b776b600f8cc644a02 Mon Sep 17 00:00:00 2001 From: Baer Date: Sat, 24 Aug 2024 16:26:06 +0200 Subject: [PATCH] WIP CreatePage implementation --- src/main/webapp/.example_env | 2 + src/main/webapp/package-lock.json | 114 ++++++++------ src/main/webapp/package.json | 1 + src/main/webapp/src/assets/css/main.css | 4 + .../src/assets/scss/customized_bootstrap.scss | 30 ++++ .../src/components/blocks/BoardView.vue | 51 +++++-- .../src/components/blocks/CreatePanel.vue | 55 +++++-- .../components/blocks/EditBoardEntryPanel.vue | 135 +++++++++++++++++ .../src/components/blocks/EditBoardPanel.vue | 135 +++++++++++++++++ .../components/blocks/EditCategoryPanel.vue | 142 ++++++++++++++++++ .../src/components/pages/CreatePage.vue | 27 +++- src/main/webapp/src/locales/en.json | 10 ++ src/main/webapp/src/main.ts | 6 +- src/main/webapp/src/models/board/Answer.ts | 4 +- src/main/webapp/src/models/board/Category.ts | 2 +- 15 files changed, 639 insertions(+), 79 deletions(-) create mode 100644 src/main/webapp/.example_env create mode 100644 src/main/webapp/src/components/blocks/EditBoardEntryPanel.vue create mode 100644 src/main/webapp/src/components/blocks/EditBoardPanel.vue create mode 100644 src/main/webapp/src/components/blocks/EditCategoryPanel.vue diff --git a/src/main/webapp/.example_env b/src/main/webapp/.example_env new file mode 100644 index 0000000..36ed11e --- /dev/null +++ b/src/main/webapp/.example_env @@ -0,0 +1,2 @@ +VITE_API_BASE_URL=/api +#VITE_API_BASE_URL=http://localhost:8008/api \ No newline at end of file diff --git a/src/main/webapp/package-lock.json b/src/main/webapp/package-lock.json index 64c4bdd..8558be2 100644 --- a/src/main/webapp/package-lock.json +++ b/src/main/webapp/package-lock.json @@ -18,6 +18,7 @@ "bootstrap": "^5.3.3", "pinia": "^2.1.7", "vue": "^3.4.21", + "vue-draggable-plus": "^0.5.3", "vue-i18n": "^9.13.1", "vue-router": "^4.3.0" }, @@ -1847,6 +1848,12 @@ "undici-types": "~5.26.4" } }, + "node_modules/@types/sortablejs": { + "version": "1.15.8", + "resolved": "https://registry.npmjs.org/@types/sortablejs/-/sortablejs-1.15.8.tgz", + "integrity": "sha512-b79830lW+RZfwaztgs1aVPgbasJ8e7AXtZYHTELNXZPsERt4ymJdjV4OccDbHQAvHrCcFpbF78jkm0R6h/pZVg==", + "license": "MIT" + }, "node_modules/@types/tough-cookie": { "version": "4.0.5", "resolved": "https://registry.npmjs.org/@types/tough-cookie/-/tough-cookie-4.0.5.tgz", @@ -1855,17 +1862,17 @@ "license": "MIT" }, "node_modules/@typescript-eslint/eslint-plugin": { - "version": "7.13.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-7.13.0.tgz", - "integrity": "sha512-FX1X6AF0w8MdVFLSdqwqN/me2hyhuQg4ykN6ZpVhh1ij/80pTvDKclX1sZB9iqex8SjQfVhwMKs3JtnnMLzG9w==", + "version": "7.18.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-7.18.0.tgz", + "integrity": "sha512-94EQTWZ40mzBc42ATNIBimBEDltSJ9RQHCC8vc/PDbxi4k8dVwUAv4o98dk50M1zB+JGFxp43FP7f8+FP8R6Sw==", "dev": true, "license": "MIT", "dependencies": { "@eslint-community/regexpp": "^4.10.0", - "@typescript-eslint/scope-manager": "7.13.0", - "@typescript-eslint/type-utils": "7.13.0", - "@typescript-eslint/utils": "7.13.0", - "@typescript-eslint/visitor-keys": "7.13.0", + "@typescript-eslint/scope-manager": "7.18.0", + "@typescript-eslint/type-utils": "7.18.0", + "@typescript-eslint/utils": "7.18.0", + "@typescript-eslint/visitor-keys": "7.18.0", "graphemer": "^1.4.0", "ignore": "^5.3.1", "natural-compare": "^1.4.0", @@ -1889,16 +1896,16 @@ } }, "node_modules/@typescript-eslint/parser": { - "version": "7.13.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-7.13.0.tgz", - "integrity": "sha512-EjMfl69KOS9awXXe83iRN7oIEXy9yYdqWfqdrFAYAAr6syP8eLEFI7ZE4939antx2mNgPRW/o1ybm2SFYkbTVA==", + "version": "7.18.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-7.18.0.tgz", + "integrity": "sha512-4Z+L8I2OqhZV8qA132M4wNL30ypZGYOQVBfMgxDH/K5UX0PNqTu1c6za9ST5r9+tavvHiTWmBnKzpCJ/GlVFtg==", "dev": true, "license": "BSD-2-Clause", "dependencies": { - "@typescript-eslint/scope-manager": "7.13.0", - "@typescript-eslint/types": "7.13.0", - "@typescript-eslint/typescript-estree": "7.13.0", - "@typescript-eslint/visitor-keys": "7.13.0", + "@typescript-eslint/scope-manager": "7.18.0", + "@typescript-eslint/types": "7.18.0", + "@typescript-eslint/typescript-estree": "7.18.0", + "@typescript-eslint/visitor-keys": "7.18.0", "debug": "^4.3.4" }, "engines": { @@ -1918,14 +1925,14 @@ } }, "node_modules/@typescript-eslint/scope-manager": { - "version": "7.13.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-7.13.0.tgz", - "integrity": "sha512-ZrMCe1R6a01T94ilV13egvcnvVJ1pxShkE0+NDjDzH4nvG1wXpwsVI5bZCvE7AEDH1mXEx5tJSVR68bLgG7Dng==", + "version": "7.18.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-7.18.0.tgz", + "integrity": "sha512-jjhdIE/FPF2B7Z1uzc6i3oWKbGcHb87Qw7AWj6jmEqNOfDFbJWtjt/XfwCpvNkpGWlcJaog5vTR+VV8+w9JflA==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/types": "7.13.0", - "@typescript-eslint/visitor-keys": "7.13.0" + "@typescript-eslint/types": "7.18.0", + "@typescript-eslint/visitor-keys": "7.18.0" }, "engines": { "node": "^18.18.0 || >=20.0.0" @@ -1936,14 +1943,14 @@ } }, "node_modules/@typescript-eslint/type-utils": { - "version": "7.13.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-7.13.0.tgz", - "integrity": "sha512-xMEtMzxq9eRkZy48XuxlBFzpVMDurUAfDu5Rz16GouAtXm0TaAoTFzqWUFPPuQYXI/CDaH/Bgx/fk/84t/Bc9A==", + "version": "7.18.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-7.18.0.tgz", + "integrity": "sha512-XL0FJXuCLaDuX2sYqZUUSOJ2sG5/i1AAze+axqmLnSkNEVMVYLF+cbwlB2w8D1tinFuSikHmFta+P+HOofrLeA==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/typescript-estree": "7.13.0", - "@typescript-eslint/utils": "7.13.0", + "@typescript-eslint/typescript-estree": "7.18.0", + "@typescript-eslint/utils": "7.18.0", "debug": "^4.3.4", "ts-api-utils": "^1.3.0" }, @@ -1964,9 +1971,9 @@ } }, "node_modules/@typescript-eslint/types": { - "version": "7.13.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-7.13.0.tgz", - "integrity": "sha512-QWuwm9wcGMAuTsxP+qz6LBBd3Uq8I5Nv8xb0mk54jmNoCyDspnMvVsOxI6IsMmway5d1S9Su2+sCKv1st2l6eA==", + "version": "7.18.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-7.18.0.tgz", + "integrity": "sha512-iZqi+Ds1y4EDYUtlOOC+aUmxnE9xS/yCigkjA7XpTKV6nCBd3Hp/PRGGmdwnfkV2ThMyYldP1wRpm/id99spTQ==", "dev": true, "license": "MIT", "engines": { @@ -1978,14 +1985,14 @@ } }, "node_modules/@typescript-eslint/typescript-estree": { - "version": "7.13.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-7.13.0.tgz", - "integrity": "sha512-cAvBvUoobaoIcoqox1YatXOnSl3gx92rCZoMRPzMNisDiM12siGilSM4+dJAekuuHTibI2hVC2fYK79iSFvWjw==", + "version": "7.18.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-7.18.0.tgz", + "integrity": "sha512-aP1v/BSPnnyhMHts8cf1qQ6Q1IFwwRvAQGRvBFkWlo3/lH29OXA3Pts+c10nxRxIBrDnoMqzhgdwVe5f2D6OzA==", "dev": true, "license": "BSD-2-Clause", "dependencies": { - "@typescript-eslint/types": "7.13.0", - "@typescript-eslint/visitor-keys": "7.13.0", + "@typescript-eslint/types": "7.18.0", + "@typescript-eslint/visitor-keys": "7.18.0", "debug": "^4.3.4", "globby": "^11.1.0", "is-glob": "^4.0.3", @@ -2007,16 +2014,16 @@ } }, "node_modules/@typescript-eslint/utils": { - "version": "7.13.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-7.13.0.tgz", - "integrity": "sha512-jceD8RgdKORVnB4Y6BqasfIkFhl4pajB1wVxrF4akxD2QPM8GNYjgGwEzYS+437ewlqqrg7Dw+6dhdpjMpeBFQ==", + "version": "7.18.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-7.18.0.tgz", + "integrity": "sha512-kK0/rNa2j74XuHVcoCZxdFBMF+aq/vH83CXAOHieC+2Gis4mF8jJXT5eAfyD3K0sAxtPuwxaIOIOvhwzVDt/kw==", "dev": true, "license": "MIT", "dependencies": { "@eslint-community/eslint-utils": "^4.4.0", - "@typescript-eslint/scope-manager": "7.13.0", - "@typescript-eslint/types": "7.13.0", - "@typescript-eslint/typescript-estree": "7.13.0" + "@typescript-eslint/scope-manager": "7.18.0", + "@typescript-eslint/types": "7.18.0", + "@typescript-eslint/typescript-estree": "7.18.0" }, "engines": { "node": "^18.18.0 || >=20.0.0" @@ -2030,13 +2037,13 @@ } }, "node_modules/@typescript-eslint/visitor-keys": { - "version": "7.13.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-7.13.0.tgz", - "integrity": "sha512-nxn+dozQx+MK61nn/JP+M4eCkHDSxSLDpgE3WcQo0+fkjEolnaB5jswvIKC4K56By8MMgIho7f1PVxERHEo8rw==", + "version": "7.18.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-7.18.0.tgz", + "integrity": "sha512-cDF0/Gf81QpY3xYyJKDV14Zwdmid5+uuENhjH2EqFaF0ni+yAyq/LzMaIJdhNJXZI7uLzwIlA+V7oWoyn6Curg==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/types": "7.13.0", + "@typescript-eslint/types": "7.18.0", "eslint-visitor-keys": "^3.4.3" }, "engines": { @@ -2753,9 +2760,9 @@ "license": "MIT" }, "node_modules/axios": { - "version": "1.7.3", - "resolved": "https://registry.npmjs.org/axios/-/axios-1.7.3.tgz", - "integrity": "sha512-Ar7ND9pU99eJ9GpoGQKhKf58GpUOgnzuaB7ueNQ5BMi0p+LZ5oaEnfF999fAArcTIBwXTCHAmGcHOZJaWPq9Nw==", + "version": "1.7.5", + "resolved": "https://registry.npmjs.org/axios/-/axios-1.7.5.tgz", + "integrity": "sha512-fZu86yCo+svH3uqJ/yTdQ0QHpQu5oL+/QE+QPSv6BZSkDAoky9vytxp7u5qk83OJFS3kEBcesWni9WTZAv3tSw==", "license": "MIT", "dependencies": { "follow-redirects": "^1.15.6", @@ -6445,6 +6452,23 @@ "dev": true, "license": "MIT" }, + "node_modules/vue-draggable-plus": { + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/vue-draggable-plus/-/vue-draggable-plus-0.5.3.tgz", + "integrity": "sha512-dwKDzZ8io3y7k2iuIwVwiGrdiq5C0S7Et7nt5Gz5KjpBS9MtZGFP+L4FJPWGSLYleOT8HmVuCXTZYjGet7wC0g==", + "license": "MIT", + "dependencies": { + "@types/sortablejs": "^1.15.8" + }, + "peerDependencies": { + "@types/sortablejs": "^1.15.0" + }, + "peerDependenciesMeta": { + "@vue/composition-api": { + "optional": true + } + } + }, "node_modules/vue-eslint-parser": { "version": "9.4.3", "resolved": "https://registry.npmjs.org/vue-eslint-parser/-/vue-eslint-parser-9.4.3.tgz", diff --git a/src/main/webapp/package.json b/src/main/webapp/package.json index 3cefde6..c0f78d4 100644 --- a/src/main/webapp/package.json +++ b/src/main/webapp/package.json @@ -23,6 +23,7 @@ "bootstrap": "^5.3.3", "pinia": "^2.1.7", "vue": "^3.4.21", + "vue-draggable-plus": "^0.5.3", "vue-i18n": "^9.13.1", "vue-router": "^4.3.0" }, diff --git a/src/main/webapp/src/assets/css/main.css b/src/main/webapp/src/assets/css/main.css index f004288..dbed91f 100644 --- a/src/main/webapp/src/assets/css/main.css +++ b/src/main/webapp/src/assets/css/main.css @@ -4,4 +4,8 @@ .pointer { cursor: pointer; +} + +.cursor-move{ + cursor: move; } \ No newline at end of file diff --git a/src/main/webapp/src/assets/scss/customized_bootstrap.scss b/src/main/webapp/src/assets/scss/customized_bootstrap.scss index 4c2d340..27eb08b 100644 --- a/src/main/webapp/src/assets/scss/customized_bootstrap.scss +++ b/src/main/webapp/src/assets/scss/customized_bootstrap.scss @@ -89,6 +89,36 @@ $utilities: map-merge( ), ), ), + "rounded-bottom-end": ( + property: border-bottom-right-radius, + class: rounded-bottom-end, + values: ( + null: var(--#{$prefix}border-radius), + 0: 0, + 1: var(--#{$prefix}border-radius-sm), + 2: var(--#{$prefix}border-radius), + 3: var(--#{$prefix}border-radius-lg), + 4: var(--#{$prefix}border-radius-xl), + 5: var(--#{$prefix}border-radius-xxl), + circle: 50%, + pill: var(--#{$prefix}border-radius-pill) + ) + ), + "rounded-top-end": ( + property: border-top-right-radius, + class: rounded-top-end, + values: ( + null: var(--#{$prefix}border-radius), + 0: 0, + 1: var(--#{$prefix}border-radius-sm), + 2: var(--#{$prefix}border-radius), + 3: var(--#{$prefix}border-radius-lg), + 4: var(--#{$prefix}border-radius-xl), + 5: var(--#{$prefix}border-radius-xxl), + circle: 50%, + pill: var(--#{$prefix}border-radius-pill) + ) + ), ), ); diff --git a/src/main/webapp/src/components/blocks/BoardView.vue b/src/main/webapp/src/components/blocks/BoardView.vue index d70c227..1dbb8aa 100644 --- a/src/main/webapp/src/components/blocks/BoardView.vue +++ b/src/main/webapp/src/components/blocks/BoardView.vue @@ -8,31 +8,54 @@ const props = defineProps<{ board: Board, }>(); +const emit = defineEmits<{ + categorySelected: [index: number], + boardEntrySelected: [cIndex: number, bEIndex: number], +}>(); + +function categorySelected(cIndex: number){ + emit("categorySelected", cIndex); +} +function boardEntrySelected(cIndex: number, bEIndex: number){ + emit("boardEntrySelected", cIndex, bEIndex); +} + + + \ No newline at end of file diff --git a/src/main/webapp/src/components/blocks/EditBoardEntryPanel.vue b/src/main/webapp/src/components/blocks/EditBoardEntryPanel.vue new file mode 100644 index 0000000..031fec0 --- /dev/null +++ b/src/main/webapp/src/components/blocks/EditBoardEntryPanel.vue @@ -0,0 +1,135 @@ + + + + + \ No newline at end of file diff --git a/src/main/webapp/src/components/blocks/EditBoardPanel.vue b/src/main/webapp/src/components/blocks/EditBoardPanel.vue new file mode 100644 index 0000000..9089ba8 --- /dev/null +++ b/src/main/webapp/src/components/blocks/EditBoardPanel.vue @@ -0,0 +1,135 @@ + + + + + \ No newline at end of file diff --git a/src/main/webapp/src/components/blocks/EditCategoryPanel.vue b/src/main/webapp/src/components/blocks/EditCategoryPanel.vue new file mode 100644 index 0000000..5f1f972 --- /dev/null +++ b/src/main/webapp/src/components/blocks/EditCategoryPanel.vue @@ -0,0 +1,142 @@ + + + + + \ No newline at end of file diff --git a/src/main/webapp/src/components/pages/CreatePage.vue b/src/main/webapp/src/components/pages/CreatePage.vue index a7ccb6b..d38b4fc 100644 --- a/src/main/webapp/src/components/pages/CreatePage.vue +++ b/src/main/webapp/src/components/pages/CreatePage.vue @@ -8,6 +8,7 @@ import type NavBar from '@/components/blocks/NavBar.vue'; import BoardView from '@/components/blocks/BoardView.vue'; import CreatePanel from '@/components/blocks/CreatePanel.vue'; +import { Category } from '@/models/board/Category'; const { t } = useI18n(); @@ -20,17 +21,35 @@ const restHeight = computed( () => { }) const board = ref(new Board("New Board")); +const board1 = ref(new Board("New Board", [new Category("Test1", "", board.value as Board),new Category("Test2", "", board.value as Board)])); +const categoryIndex = ref(null); +const boardEntryIndex = ref(null); + +function showBoardEntry(cIndex: number, bEIndex: number){ + categoryIndex.value = cIndex; + boardEntryIndex.value = bEIndex; +} + +function showCategory(cIndex: number){ + categoryIndex.value = cIndex; + boardEntryIndex.value = null; +} + +function showBoard(){ + categoryIndex.value = null; + boardEntryIndex.value = null; +}