diff --git a/ui/package-lock.json b/ui/package-lock.json
index d42d180..8c0a15c 100644
--- a/ui/package-lock.json
+++ b/ui/package-lock.json
@@ -11,12 +11,12 @@
"@tailwindcss/vite": "^4.1.11",
"@tanstack/vue-table": "^8.21.3",
"@vee-validate/zod": "^4.15.1",
- "@vueuse/core": "^13.7.0",
+ "@vueuse/core": "^13.9.0",
"class-variance-authority": "^0.7.1",
"clsx": "^2.1.1",
"lucide-vue-next": "^0.539.0",
"pinia": "^3.0.3",
- "reka-ui": "^2.4.1",
+ "reka-ui": "^2.5.0",
"tailwind-merge": "^3.3.1",
"tailwindcss": "^4.1.11",
"tw-animate-css": "^1.3.6",
@@ -1982,14 +1982,14 @@
"license": "MIT"
},
"node_modules/@vueuse/core": {
- "version": "13.7.0",
- "resolved": "https://registry.npmjs.org/@vueuse/core/-/core-13.7.0.tgz",
- "integrity": "sha512-myagn09+c6BmS6yHc1gTwwsdZilAovHslMjyykmZH3JNyzI5HoWhv114IIdytXiPipdHJ2gDUx0PB93jRduJYg==",
+ "version": "13.9.0",
+ "resolved": "https://registry.npmjs.org/@vueuse/core/-/core-13.9.0.tgz",
+ "integrity": "sha512-ts3regBQyURfCE2BcytLqzm8+MmLlo5Ln/KLoxDVcsZ2gzIwVNnQpQOL/UKV8alUqjSZOlpFZcRNsLRqj+OzyA==",
"license": "MIT",
"dependencies": {
"@types/web-bluetooth": "^0.0.21",
- "@vueuse/metadata": "13.7.0",
- "@vueuse/shared": "13.7.0"
+ "@vueuse/metadata": "13.9.0",
+ "@vueuse/shared": "13.9.0"
},
"funding": {
"url": "https://github.com/sponsors/antfu"
@@ -1999,18 +1999,18 @@
}
},
"node_modules/@vueuse/metadata": {
- "version": "13.7.0",
- "resolved": "https://registry.npmjs.org/@vueuse/metadata/-/metadata-13.7.0.tgz",
- "integrity": "sha512-8okFhS/1ite8EwUdZZfvTYowNTfXmVCOrBFlA31O0HD8HKXhY+WtTRyF0LwbpJfoFPc+s9anNJIXMVrvP7UTZg==",
+ "version": "13.9.0",
+ "resolved": "https://registry.npmjs.org/@vueuse/metadata/-/metadata-13.9.0.tgz",
+ "integrity": "sha512-1AFRvuiGphfF7yWixZa0KwjYH8ulyjDCC0aFgrGRz8+P4kvDFSdXLVfTk5xAN9wEuD1J6z4/myMoYbnHoX07zg==",
"license": "MIT",
"funding": {
"url": "https://github.com/sponsors/antfu"
}
},
"node_modules/@vueuse/shared": {
- "version": "13.7.0",
- "resolved": "https://registry.npmjs.org/@vueuse/shared/-/shared-13.7.0.tgz",
- "integrity": "sha512-Wi2LpJi4UA9kM0OZ0FCZslACp92HlVNw1KPaDY6RAzvQ+J1s7seOtcOpmkfbD5aBSmMn9NvOakc8ZxMxmDXTIg==",
+ "version": "13.9.0",
+ "resolved": "https://registry.npmjs.org/@vueuse/shared/-/shared-13.9.0.tgz",
+ "integrity": "sha512-e89uuTLMh0U5cZ9iDpEI2senqPGfbPRTHM/0AaQkcxnpqjkZqDYP8rpfm7edOz8s+pOCOROEy1PIveSW8+fL5g==",
"license": "MIT",
"funding": {
"url": "https://github.com/sponsors/antfu"
@@ -3171,9 +3171,9 @@
}
},
"node_modules/reka-ui": {
- "version": "2.4.1",
- "resolved": "https://registry.npmjs.org/reka-ui/-/reka-ui-2.4.1.tgz",
- "integrity": "sha512-NB7DrCsODN8MH02BWtgiExygfFcuuZ5/PTn6fMgjppmFHqePvNhmSn1LEuF35nel6PFbA4v+gdj0IoGN1yZ+vw==",
+ "version": "2.5.0",
+ "resolved": "https://registry.npmjs.org/reka-ui/-/reka-ui-2.5.0.tgz",
+ "integrity": "sha512-81aMAmJeVCy2k0E6x7n1kypDY6aM1ldLis5+zcdV1/JtoAlSDck5OBsyLRJU9CfgbrQp1ImnRnBSmC4fZ2fkZQ==",
"license": "MIT",
"dependencies": {
"@floating-ui/dom": "^1.6.13",
diff --git a/ui/package.json b/ui/package.json
index 4424d70..aaa88ff 100644
--- a/ui/package.json
+++ b/ui/package.json
@@ -15,12 +15,12 @@
"@tailwindcss/vite": "^4.1.11",
"@tanstack/vue-table": "^8.21.3",
"@vee-validate/zod": "^4.15.1",
- "@vueuse/core": "^13.7.0",
+ "@vueuse/core": "^13.9.0",
"class-variance-authority": "^0.7.1",
"clsx": "^2.1.1",
"lucide-vue-next": "^0.539.0",
"pinia": "^3.0.3",
- "reka-ui": "^2.4.1",
+ "reka-ui": "^2.5.0",
"tailwind-merge": "^3.3.1",
"tailwindcss": "^4.1.11",
"tw-animate-css": "^1.3.6",
diff --git a/ui/src/api/rank.ts b/ui/src/api/rank.ts
new file mode 100644
index 0000000..e69de29
diff --git a/ui/src/components/ui/combobox/Combobox.vue b/ui/src/components/ui/combobox/Combobox.vue
new file mode 100644
index 0000000..79673ee
--- /dev/null
+++ b/ui/src/components/ui/combobox/Combobox.vue
@@ -0,0 +1,33 @@
+
+
+
+
+
+
+
diff --git a/ui/src/components/ui/combobox/ComboboxAnchor.vue b/ui/src/components/ui/combobox/ComboboxAnchor.vue
new file mode 100644
index 0000000..e0bfbe2
--- /dev/null
+++ b/ui/src/components/ui/combobox/ComboboxAnchor.vue
@@ -0,0 +1,26 @@
+
+
+
+
+
+
+
diff --git a/ui/src/components/ui/combobox/ComboboxEmpty.vue b/ui/src/components/ui/combobox/ComboboxEmpty.vue
new file mode 100644
index 0000000..5819972
--- /dev/null
+++ b/ui/src/components/ui/combobox/ComboboxEmpty.vue
@@ -0,0 +1,23 @@
+
+
+
+
+
+
+
diff --git a/ui/src/components/ui/combobox/ComboboxGroup.vue b/ui/src/components/ui/combobox/ComboboxGroup.vue
new file mode 100644
index 0000000..0fb9296
--- /dev/null
+++ b/ui/src/components/ui/combobox/ComboboxGroup.vue
@@ -0,0 +1,30 @@
+
+
+
+
+
+ {{ heading }}
+
+
+
+
diff --git a/ui/src/components/ui/combobox/ComboboxInput.vue b/ui/src/components/ui/combobox/ComboboxInput.vue
new file mode 100644
index 0000000..6dd3822
--- /dev/null
+++ b/ui/src/components/ui/combobox/ComboboxInput.vue
@@ -0,0 +1,47 @@
+
+
+
+
+
+
+
+
+
+
diff --git a/ui/src/components/ui/combobox/ComboboxItem.vue b/ui/src/components/ui/combobox/ComboboxItem.vue
new file mode 100644
index 0000000..9eb2087
--- /dev/null
+++ b/ui/src/components/ui/combobox/ComboboxItem.vue
@@ -0,0 +1,34 @@
+
+
+
+
+
+
+
diff --git a/ui/src/components/ui/combobox/ComboboxItemIndicator.vue b/ui/src/components/ui/combobox/ComboboxItemIndicator.vue
new file mode 100644
index 0000000..0aaf267
--- /dev/null
+++ b/ui/src/components/ui/combobox/ComboboxItemIndicator.vue
@@ -0,0 +1,25 @@
+
+
+
+
+
+
+
diff --git a/ui/src/components/ui/combobox/ComboboxList.vue b/ui/src/components/ui/combobox/ComboboxList.vue
new file mode 100644
index 0000000..86b5038
--- /dev/null
+++ b/ui/src/components/ui/combobox/ComboboxList.vue
@@ -0,0 +1,58 @@
+
+
+
+
+
+
+
+
+
diff --git a/ui/src/components/ui/combobox/ComboboxSeparator.vue b/ui/src/components/ui/combobox/ComboboxSeparator.vue
new file mode 100644
index 0000000..4b8d07e
--- /dev/null
+++ b/ui/src/components/ui/combobox/ComboboxSeparator.vue
@@ -0,0 +1,23 @@
+
+
+
+
+
+
+
diff --git a/ui/src/components/ui/combobox/ComboboxTrigger.vue b/ui/src/components/ui/combobox/ComboboxTrigger.vue
new file mode 100644
index 0000000..3d37377
--- /dev/null
+++ b/ui/src/components/ui/combobox/ComboboxTrigger.vue
@@ -0,0 +1,27 @@
+
+
+
+
+
+
+
diff --git a/ui/src/components/ui/combobox/ComboboxViewport.vue b/ui/src/components/ui/combobox/ComboboxViewport.vue
new file mode 100644
index 0000000..8dc08ad
--- /dev/null
+++ b/ui/src/components/ui/combobox/ComboboxViewport.vue
@@ -0,0 +1,31 @@
+
+
+
+
+
+
+
diff --git a/ui/src/components/ui/combobox/index.js b/ui/src/components/ui/combobox/index.js
new file mode 100644
index 0000000..5c86c51
--- /dev/null
+++ b/ui/src/components/ui/combobox/index.js
@@ -0,0 +1,12 @@
+export { default as Combobox } from "./Combobox.vue";
+export { default as ComboboxAnchor } from "./ComboboxAnchor.vue";
+export { default as ComboboxEmpty } from "./ComboboxEmpty.vue";
+export { default as ComboboxGroup } from "./ComboboxGroup.vue";
+export { default as ComboboxInput } from "./ComboboxInput.vue";
+export { default as ComboboxItem } from "./ComboboxItem.vue";
+export { default as ComboboxItemIndicator } from "./ComboboxItemIndicator.vue";
+export { default as ComboboxList } from "./ComboboxList.vue";
+export { default as ComboboxSeparator } from "./ComboboxSeparator.vue";
+export { default as ComboboxViewport } from "./ComboboxViewport.vue";
+
+export { ComboboxCancel, ComboboxTrigger } from "reka-ui";
diff --git a/ui/src/pages/Application.vue b/ui/src/pages/Application.vue
index 8c2738d..2c1d562 100644
--- a/ui/src/pages/Application.vue
+++ b/ui/src/pages/Application.vue
@@ -2,8 +2,10 @@
import ApplicationChat from '@/components/application/ApplicationChat.vue';
import ApplicationForm from '@/components/application/ApplicationForm.vue';
import { onMounted, ref } from 'vue';
-import { ApplicationData, loadApplication, postApplication, postChatMessage, Status } from '@/api/application';
+import { ApplicationData, approveApplication, denyApplication, loadApplication, postApplication, postChatMessage, Status } from '@/api/application';
import { useRoute } from 'vue-router';
+import Button from '@/components/ui/button/Button.vue';
+import { CheckIcon, XIcon } from 'lucide-vue-next';
const appData = ref(null);
const appID = ref(null);
@@ -59,6 +61,14 @@ async function postApp(appData) {
// TODO: Handle fail to post
}
+async function handleApprove(id) {
+ console.log("hi");
+ await approveApplication(id);
+}
+
+async function handleDeny(id) {
+ await denyApplication(id);
+}
@@ -90,16 +100,24 @@ async function postApp(appData) {
hour: "2-digit",
minute: "2-digit"
}) }}
+
+
+
+
Apply to join the 17th Rangers
- {postApp(e)}" class="mb-7">
+ { postApp(e) }" class="mb-7">
diff --git a/ui/src/pages/ManageApplications.vue b/ui/src/pages/ManageApplications.vue
index b01c77e..ef578ee 100644
--- a/ui/src/pages/ManageApplications.vue
+++ b/ui/src/pages/ManageApplications.vue
@@ -12,6 +12,7 @@ import {
import Button from '@/components/ui/button/Button.vue';
import { onMounted, ref } from 'vue';
import { useRouter } from 'vue-router';
+import { CheckIcon, XIcon } from 'lucide-vue-next';
const appList = ref([]);
const now = Date.now();
@@ -86,8 +87,8 @@ onMounted(async () => {
{{ formatAgo(app.submitted_at) }}
-
-
+
+
+import { Check, Search } from "lucide-vue-next"
+import { Combobox, ComboboxAnchor, ComboboxEmpty, ComboboxGroup, ComboboxInput, ComboboxItem, ComboboxItemIndicator, ComboboxList } from "@/components/ui/combobox"
+
+const frameworks = [
+ { value: "next.js", label: "Next.js" },
+ { value: "sveltekit", label: "SvelteKit" },
+ { value: "nuxt", label: "Nuxt" },
+ { value: "remix", label: "Remix" },
+ { value: "astro", label: "Astro" },
+]
+
+
+
+
+
+
+
+
+
+
+ No results
+
+
+
+ {{ framework.label }}
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/ui/src/router/index.js b/ui/src/router/index.js
index 169bbbe..16793c4 100644
--- a/ui/src/router/index.js
+++ b/ui/src/router/index.js
@@ -1,12 +1,14 @@
import { createRouter, createWebHistory } from 'vue-router'
import ManageApplications from '@/pages/ManageApplications.vue'
import Application from '@/pages/Application.vue'
+import RankChange from '@/pages/RankChange.vue'
const router = createRouter({
history: createWebHistory(import.meta.env.BASE_URL),
routes: [
{ path: '/applications', component: ManageApplications },
{ path: '/applications/:id', component: Application },
+ { path: '/changeRank', component: RankChange },
]
})