From 40676af11e1dba8bf00b2e7476941524c10669ea Mon Sep 17 00:00:00 2001 From: Vadim Date: Sat, 10 May 2025 21:13:42 +0300 Subject: [PATCH] wip --- bin/server | Bin 22746018 -> 22746018 bytes internal/repository/status/status.go | 2 +- web/bun.lock | 4 +- web/index.html | 1 + web/package.json | 2 +- web/src/components/DynamicMenu.vue | 38 +++++++ web/src/components/FormInput.vue | 30 ++++++ web/src/components/FormTextarea.vue | 37 +++++++ web/src/components/IssueCreateForm.vue | 24 ++++- web/src/components/IssueItemDetails.vue | 64 ++++++++++++ web/src/components/IssueListItem.vue | 63 +++++++----- web/src/components/IssuesByStatusList.vue | 18 +--- web/src/components/ProjectCreateFlow.vue | 66 ++++++++++++ web/src/components/StatusMenu.vue | 40 ++++++++ web/src/layouts/DefaultLayout.vue | 39 +++++--- web/src/main.ts | 2 +- web/src/router/index.ts | 17 +++- web/src/stores/components.ts | 12 --- web/src/stores/issues.ts | 10 +- web/src/stores/projects.ts | 9 +- web/src/stores/server.ts | 12 +++ web/src/types.ts | 28 ++++++ web/src/views/ExampleRootView.vue | 7 ++ web/src/views/HelloWorld.ts | 20 ---- web/src/views/HomeView.vue | 39 ++------ web/src/views/IssuesRootView.vue | 116 +++++++++++++++++++--- web/src/views/ProjectRootView.vue | 79 ++++++++++++++- web/vite.config.ts | 1 + 28 files changed, 633 insertions(+), 147 deletions(-) create mode 100644 web/src/components/DynamicMenu.vue create mode 100644 web/src/components/FormInput.vue create mode 100644 web/src/components/FormTextarea.vue create mode 100644 web/src/components/IssueItemDetails.vue create mode 100644 web/src/components/ProjectCreateFlow.vue create mode 100644 web/src/components/StatusMenu.vue delete mode 100644 web/src/stores/components.ts create mode 100644 web/src/stores/server.ts create mode 100644 web/src/types.ts create mode 100644 web/src/views/ExampleRootView.vue delete mode 100644 web/src/views/HelloWorld.ts diff --git a/bin/server b/bin/server index 435c0205ba42720a13a757c8f54bf39f3fb525a9..dfcd1bf5a658da6d8594492d0f2f66e36c2a0bff 100755 GIT binary patch delta 8050 zcmYk=2{=^W<3Dis+Ly*M*%@Q(OSTdr`@Zj_EFpUlktKVYEFY4%mNc?c5vi-lNN7V^3P1)sIHI20Of;S{Z8 zelRlChXeKDfb_YcXmYg#gjP$yQeIFNxjzj?`_pJOd*C-JD60jXz!gY{EIC03&;twr zBfx}8PB7CZ!TWd-x#KL>FdHutcbr89lxX8|mT_j#fo7g!k)_3Y&;XWCSPv4&LV~bL zTM&!(-^z9{%OEW_$v`NJJ}AlfFcyFnU_TF;SLJdNX|D9tiW3p$mB+ct#c(NAx2PxryCQfS3zoCbtdK2PGDVXUI| z71z%IDhT5oZX7%Cbq;st?+}Lt9M9iM@K2l{E!H)(j1$1dl9x7c06V~eE^TlYD?npt zh6Gom5G*ZiUAc7-&B8W#9i2=DV%vTC!p#md(v_fD6VU;hK4oXHcHu&4<&5!AHM)4qp=YJL(OUpadVv0TZ4uVpEtf5@gUFX2KC#C?LOqz=vAz zBX~lPIMRS4Sio;&kVYIq7_nt1Fd;;C0w=7l{eMUJ;dQnDYcQc#*a?vkyk8E{;RLT( z-~g|X=LE0dP({I!4j7t5ckzT#dT0wB;U~!XGcU8}PTA1>N?}3>Ndy%{E1B>ft`#8j zrVvox6cJ|;`1%oY=uHuT2#BJgH%WsB;Aj>kv7aQ0_zsZxp)fRIfaF6k zbRFsXNeYH9C?blBBmw9IV!lWMmlGPkNV0%oS22{jOu7n#%gug`gg*$WqkfWNOFCd% zoc+Wo5EPAW_=`Dkfwp<9n1MU&rGVy)ilso%MTG0USPjf^6m5GiRsg|Ce5k{O*ti08 z0aaiTPZb0+HA{%M9fl`yXy^%XYgYIgKT7o%=fT5DhtbhkaTRu`8)eB57ugSqqp~-| z6-lrq3HjV9egM7PDc-{YZUpPM;x6!WM#SbVIQZ_Z_Yq#5`75` z9;`CzDsh+&szh<_67zK60J42jq8ICU>Maq49UyD^OQ4$mk{zd^b@cZ;NnRDOZZ1YC zK{luxQNT;x0uP39yi^W412TXtdU#6?zYK+t&1dC-1Aqdc2q*!{fC_LBI0UEyhXFM} z9W|dlG7tqDa-)Kt8X8C7Wf|0^P~-4^m`x7NxvgOgfnQ+cjz&Z}q=cHQX|gjyzNnkF zCL;{FqTafi26W)LS8b>{!wP=!Y+FqPrVkO$HDp6Pv^9B9T?fr0bo8AXxrWSWf{SJ_ zBeYJQ^Uy@+JhT#J;Wt9$;B+nED4-4K0J?x4pbr=ThJXzLW7jd)ufIP3k*F&JQ?AGu6x)s8Ia*}d%yv31e^e8zy)vxjsb4Kao_~t z4tM~bfEREQ@CJMUU*Htr2lxX4Kp+qV1Op+!Y2XYH3WNb?fp8!KI0r-mQNVd18i)a6 zfjHm-5Dz2(i9iyN45R?5z(pVpxCD@a%RoAi0b~MMz&}7XkON!+a)GNr9&ioF2MPcL zCVaFpZQu^j05k%3fhM3CxCgWV z_kjlh3bXivUATM%J9~I~Xo&a6IQ=l8@0eXRFz;oaQ@Dk_)UIDLx zeqaE21H1(Wfg#`>Fbs?Uqre#O9vBBEfDgb&;1lo}m;}B6Q@~eX8u$i$2WEg-;0G`V z%mWL+Phb&P0+xXlU=>&c)`5S44Ya6l(uu#R~ zFcxZ9sAF*i3k@tZvCzWeC>GjS=wP9Xg&r3ASQuboh=mar##oqOVTy$r7Uo!3U}1@c z6&BW5*kECcg&h|5SU6zeh=mgt&RDoWR8cWk=%$WthNJa&dGSw&b{}y1y|<>_NbA36 z>0-Gf$Whq(=P7-hbiz&C%hoqSqzri8dc zlPq43�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 diff --git a/internal/repository/status/status.go b/internal/repository/status/status.go index a18630c..226d27c 100644 --- a/internal/repository/status/status.go +++ b/internal/repository/status/status.go @@ -28,7 +28,7 @@ func NewRepository(client database.Client) Repository { } func (r *repository) Find(ctx context.Context) ([]*status.Status, error) { - query := "select id, name, description, position from statuses order by id asc" + query := "select id, name, description, position from statuses order by position asc" rows, err := r.client.Query(ctx, query) if err != nil { diff --git a/web/bun.lock b/web/bun.lock index 97d6c40..6a80736 100644 --- a/web/bun.lock +++ b/web/bun.lock @@ -11,7 +11,7 @@ "vue": "^3.5.13", "vue-draggable-next": "^2.2.1", "vue-router": "^4.5.0", - "vuetify": "^3.7.16", + "vuetify": "^3.8.2", }, "devDependencies": { "@mdi/font": "^7.4.47", @@ -803,7 +803,7 @@ "vue-tsc": ["vue-tsc@2.2.8", "", { "dependencies": { "@volar/typescript": "~2.4.11", "@vue/language-core": "2.2.8" }, "peerDependencies": { "typescript": ">=5.0.0" }, "bin": { "vue-tsc": "./bin/vue-tsc.js" } }, "sha512-jBYKBNFADTN+L+MdesNX/TB3XuDSyaWynKMDgR+yCSln0GQ9Tfb7JS2lr46s2LiFUT1WsmfWsSvIElyxzOPqcQ=="], - "vuetify": ["vuetify@3.7.16", "", { "peerDependencies": { "typescript": ">=4.7", "vite-plugin-vuetify": ">=1.0.0", "vue": "^3.3.0", "webpack-plugin-vuetify": ">=2.0.0" }, "optionalPeers": ["typescript", "vite-plugin-vuetify", "webpack-plugin-vuetify"] }, "sha512-Few/cBtgJYgdkzi0LWmVy67G5uc2+q7oWcadbcTUPAtEtGYNh2AM28h01Fk+ScJgfxkA077//ZDff1rh3jYG/w=="], + "vuetify": ["vuetify@3.8.2", "", { "peerDependencies": { "typescript": ">=4.7", "vite-plugin-vuetify": ">=2.1.0", "vue": "^3.5.0", "webpack-plugin-vuetify": ">=3.1.0" }, "optionalPeers": ["typescript", "vite-plugin-vuetify", "webpack-plugin-vuetify"] }, "sha512-UJNFP4egmKJTQ3V3MKOq+7vIUKO7/Fko5G6yUsOW2Rm0VNBvAjgO6VY6EnK3DTqEKN6ugVXDEPw37NQSTGLZvw=="], "which": ["which@5.0.0", "", { "dependencies": { "isexe": "^3.1.1" }, "bin": { "node-which": "bin/which.js" } }, "sha512-JEdGzHwwkrbWoGOlIHqQ5gtprKGOenpDHpxE9zVR1bWbOtYRyPPHMe9FaP6x61CmNaTThSkb0DAJte5jD+DmzQ=="], diff --git a/web/index.html b/web/index.html index 9e5fc8f..46b049d 100644 --- a/web/index.html +++ b/web/index.html @@ -4,6 +4,7 @@ + Vite App diff --git a/web/package.json b/web/package.json index 0539233..dfdbaec 100644 --- a/web/package.json +++ b/web/package.json @@ -20,7 +20,7 @@ "vue": "^3.5.13", "vue-draggable-next": "^2.2.1", "vue-router": "^4.5.0", - "vuetify": "^3.7.16" + "vuetify": "^3.8.2" }, "devDependencies": { "@mdi/font": "^7.4.47", diff --git a/web/src/components/DynamicMenu.vue b/web/src/components/DynamicMenu.vue new file mode 100644 index 0000000..836abc1 --- /dev/null +++ b/web/src/components/DynamicMenu.vue @@ -0,0 +1,38 @@ + + + + + diff --git a/web/src/components/FormInput.vue b/web/src/components/FormInput.vue new file mode 100644 index 0000000..a78767b --- /dev/null +++ b/web/src/components/FormInput.vue @@ -0,0 +1,30 @@ + + + + + diff --git a/web/src/components/FormTextarea.vue b/web/src/components/FormTextarea.vue new file mode 100644 index 0000000..676cca0 --- /dev/null +++ b/web/src/components/FormTextarea.vue @@ -0,0 +1,37 @@ + + + + + diff --git a/web/src/components/IssueCreateForm.vue b/web/src/components/IssueCreateForm.vue index 636c3eb..76ef00c 100644 --- a/web/src/components/IssueCreateForm.vue +++ b/web/src/components/IssueCreateForm.vue @@ -25,6 +25,13 @@ const disabled = computed(() => !issue.value.name) const addIssue = async () => { const result = await issuesStore.create(issue.value) showForm.value = !result + issue.value = { + name: undefined, + description: undefined, + status_id: props.status.id, + project_id: 1, + position: 0, + } } function onClickOutside() { @@ -35,15 +42,26 @@ function onClickOutside() {