diff options
author | GeckoEidechse <gecko.eidechse+git@pm.me> | 2023-04-26 21:58:55 +0200 |
---|---|---|
committer | GeckoEidechse <gecko.eidechse+git@pm.me> | 2023-04-26 21:58:55 +0200 |
commit | 10616b295eb23c8250a0d874fe05211f73a8ba81 (patch) | |
tree | aa9496bd16d973f69f6c4d9df7695cae469fad83 /src-vue/src/components/PullRequestsSelector.vue | |
parent | 85bb5253657c16d9674a9be2f6c8090b413ca7fb (diff) | |
parent | e38ab60e1e4f565f0dafdb7b539e386a390594d7 (diff) | |
download | FlightCore-10616b295eb23c8250a0d874fe05211f73a8ba81.tar.gz FlightCore-10616b295eb23c8250a0d874fe05211f73a8ba81.zip |
Merge branch 'main' into fix/handle-failed-download
Diffstat (limited to 'src-vue/src/components/PullRequestsSelector.vue')
-rw-r--r-- | src-vue/src/components/PullRequestsSelector.vue | 89 |
1 files changed, 80 insertions, 9 deletions
diff --git a/src-vue/src/components/PullRequestsSelector.vue b/src-vue/src/components/PullRequestsSelector.vue index 58a355f4..ba95624a 100644 --- a/src-vue/src/components/PullRequestsSelector.vue +++ b/src-vue/src/components/PullRequestsSelector.vue @@ -1,7 +1,12 @@ <template> <div> <el-collapse @change="onChange"> - <el-collapse-item title="Launcher PRs" name="1"> + <el-collapse-item name="1"> + <template #title> + Launcher PRs + <el-input class="pr_search_input" v-model="launcherSearch" placeholder="Filter pull requests" @click.stop="() => false"></el-input> + </template> + <p v-if="pull_requests_launcher.length === 0"> <el-progress :show-text="false" @@ -12,16 +17,28 @@ style="margin: 15px" /> </p> - <el-card v-else shadow="hover" v-for="pull_request in pull_requests_launcher" - v-bind:key="pull_request.url"> + <el-card + v-else-if="filtered_launcher_pull_requests.length !== 0" + shadow="hover" + v-for="pull_request in filtered_launcher_pull_requests" + v-bind:key="pull_request.url" + > <el-button type="primary" @click="installLauncherPR(pull_request)">Install</el-button> + <el-button type="primary" @click="downloadLauncherPR(pull_request)">Download</el-button> <a target="_blank" :href="pull_request.html_url"> {{ pull_request.number }}: {{ pull_request.title }} </a> </el-card> + <div v-else class="no_matching_pr"> + No matching PR found. + </div> </el-collapse-item> - <el-collapse-item title="Mods PRs" name="2"> + <el-collapse-item name="2"> + <template #title> + Mods PRs + <el-input class="pr_search_input" v-model="modsSearch" placeholder="Filter pull requests" @click.stop="() => false"></el-input> + </template> <div style="margin: 15px"> <el-alert title="Warning" type="warning" :closable="false" show-icon> Mod PRs are installed into a separate profile. Make sure to launch via @@ -39,12 +56,21 @@ style="margin: 15px" /> </p> - <el-card v-else shadow="hover" v-for="pull_request in pull_requests_mods" v-bind:key="pull_request.url"> + <el-card + v-else-if="filtered_mods_pull_requests.length !== 0" + shadow="hover" + v-for="pull_request in filtered_mods_pull_requests" + v-bind:key="pull_request.url" + > <el-button type="primary" @click="installModsPR(pull_request)">Install</el-button> + <el-button type="primary" @click="downloadModsPR(pull_request)">Download</el-button> <a target="_blank" :href="pull_request.html_url"> {{ pull_request.number }}: {{ pull_request.title }} </a> </el-card> + <div v-else class="no_matching_pr"> + No matching PR found. + </div> </el-collapse-item> </el-collapse> </div> @@ -54,11 +80,13 @@ import { defineComponent } from 'vue' import { PullRequestType } from '../../../src-tauri/bindings/PullRequestType'; import { PullsApiResponseElement } from '../../../src-tauri/bindings/PullsApiResponseElement'; -import { invoke } from "@tauri-apps/api"; -import { ElNotification } from "element-plus"; export default defineComponent({ name: 'PullRequestsSelector', + data: () => ({ + launcherSearch: '', + modsSearch: '' + }), computed: { pull_requests_launcher(): PullsApiResponseElement[] { return this.$store.state.pullrequests.pull_requests_launcher; @@ -66,20 +94,49 @@ export default defineComponent({ pull_requests_mods(): PullsApiResponseElement[] { return this.$store.state.pullrequests.pull_requests_mods; }, + + filtered_launcher_pull_requests(): PullsApiResponseElement[] { + if (this.launcherSearch.length === 0) { + return this.pull_requests_launcher; + } + + return this.pull_requests_launcher.filter(pr => + // Check PR id + pr.number.toString().indexOf(this.launcherSearch) !== -1 + // Check PR title + || pr.title.toLowerCase().indexOf(this.launcherSearch.toLowerCase()) !== -1); + }, + filtered_mods_pull_requests(): PullsApiResponseElement[] { + if (this.modsSearch.length === 0) { + return this.pull_requests_mods; + } + + return this.pull_requests_mods.filter(pr => + // Check PR id + pr.number.toString().indexOf(this.modsSearch) !== -1 + // Check PR title + || pr.title.toLowerCase().indexOf(this.modsSearch.toLowerCase()) !== -1); + }, }, methods: { onChange(e: Object) { const openedCollapseNames = Object.values(e); if (openedCollapseNames.includes('1') && this.pull_requests_launcher.length === 0) { - this.getPullRequests('LAUNCHER'); + this.getPullRequests('Launcher'); } if (openedCollapseNames.includes('2') && this.pull_requests_mods.length === 0) { - this.getPullRequests('MODS'); + this.getPullRequests('Mods'); } }, async getPullRequests(pull_request_type: PullRequestType) { this.$store.commit('getPullRequests', pull_request_type); }, + async downloadLauncherPR(pull_request: PullsApiResponseElement) { + this.$store.commit('downloadLauncherPR', pull_request); + }, + async downloadModsPR(pull_request: PullsApiResponseElement) { + this.$store.commit('downloadModsPR', pull_request); + }, async installLauncherPR(pull_request: PullsApiResponseElement) { this.$store.commit('installLauncherPR', pull_request); }, @@ -100,4 +157,18 @@ export default defineComponent({ padding-left: 10px; font-size: 14px; } + +.el-collapse:deep(.el-collapse-item__arrow) { + margin: 0 8px; +} + +.pr_search_input { + width: 200px; + margin: 0 0 0 auto; +} + +.no_matching_pr { + margin: 0 auto; + width: max-content; +} </style> |