Skip to content

Commit 1e8c4f7

Browse files
committed
Add year filter (#39)
1 parent 4d03251 commit 1e8c4f7

5 files changed

Lines changed: 64 additions & 45 deletions

File tree

backend/app.py

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -59,8 +59,8 @@ def filelist():
5959

6060

6161
@app.get("/api/coins", dependencies=[Depends(get_api_key)])
62-
def coins(f, search=None, sort=None, reverse: bool = False, status_filter=None, country_filter=None, series_filter=None, type_filter=None,
63-
period_filter=None, mint_filter=None):
62+
def coins(f, search=None, sort=None, reverse: bool = False, status_filter=None, country_filter=None, year_filter=None,
63+
series_filter=None, type_filter=None, period_filter=None, mint_filter=None):
6464
file = f
6565
con = sqlite_connect(file)
6666
cur = con.cursor()
@@ -81,6 +81,9 @@ def coins(f, search=None, sort=None, reverse: bool = False, status_filter=None,
8181
if country_filter:
8282
sql_filters.append("country = ?")
8383
params.append(country_filter)
84+
if year_filter:
85+
sql_filters.append("year = ?")
86+
params.append(year_filter)
8487
if series_filter:
8588
sql_filters.append("series = ?")
8689
params.append(series_filter)
@@ -144,7 +147,7 @@ def filters(f):
144147

145148
result = {}
146149

147-
for field in ('status', 'country', 'series', 'type', 'period', 'mint',):
150+
for field in ('status', 'country', 'year', 'series', 'type', 'period', 'mint',):
148151
res = cur.execute(f"SELECT DISTINCT IFNULL({field},'') FROM coins ORDER BY {field}")
149152
data = res.fetchall()
150153

frontend/package-lock.json

Lines changed: 38 additions & 35 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

frontend/src/App.vue

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -76,7 +76,7 @@ const openFile = async (file, connection_type) => {
7676
7777
await router.replace('/')
7878
collectionSettings.value = {};
79-
collectionFilters.value = {'status': [], 'country': [], 'series': [], 'type': [], 'period': [], 'mint': []}
79+
collectionFilters.value = {'status': [], 'country': [], 'year': [], 'series': [], 'type': [], 'period': [], 'mint': []}
8080
isOpened = true;
8181
8282
let ret = null

frontend/src/components/CoinListView.vue

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ const sortedBy = ref(null)
2020
const reverseSort = ref(false)
2121
const selectedStatus = ref(null)
2222
const selectedCountry = ref(null)
23+
const selectedYear = ref(null)
2324
const selectedSeries = ref(null)
2425
const selectedType = ref(null)
2526
const selectedPeriod = ref(null)
@@ -61,11 +62,13 @@ const onOpenFile = async () => {
6162
});
6263
}
6364
64-
fields.value = ['title', 'year']
65+
fields.value = ['title',]
6566
if (props.filters['status'].length > 1)
6667
fields.value.push('status')
6768
if (props.filters['country'].length > 1)
6869
fields.value.push('country')
70+
if (props.filters['year'].length > 1)
71+
fields.value.push('year')
6972
if (props.filters['series'].length > 1)
7073
fields.value.push('series')
7174
if (props.filters['type'].length > 1)
@@ -80,6 +83,7 @@ const clear = async () => {
8083
reverseSort.value = false
8184
selectedStatus.value = null
8285
selectedCountry.value = null
86+
selectedYear.value = null
8387
selectedSeries.value = null
8488
selectedType.value = null
8589
selectedPeriod.value = null
@@ -119,6 +123,7 @@ const onChanged = async () => {
119123
reverseSort.value,
120124
selectedStatus.value,
121125
selectedCountry.value,
126+
selectedYear.value,
122127
selectedSeries.value,
123128
selectedType.value,
124129
selectedPeriod.value,
@@ -142,6 +147,7 @@ const loadImage = async (coinId) => {
142147
<v-container>
143148
<FilterItem :filters="filters['status']" field="status" :settings="settings" @filter-changed="onChanged" v-model="selectedStatus" />
144149
<FilterItem :filters="filters['country']" field="country" :settings="settings" @filter-changed="onChanged" v-model="selectedCountry" />
150+
<FilterItem :filters="filters['year']" field="year" :settings="settings" @filter-changed="onChanged" v-model="selectedYear" />
145151
<FilterItem :filters="filters['series']" field="series" :settings="settings" @filter-changed="onChanged" v-model="selectedSeries" />
146152
<FilterItem :filters="filters['type']" field="type" :settings="settings" @filter-changed="onChanged" v-model="selectedType" />
147153
<FilterItem :filters="filters['period']" field="period" :settings="settings" @filter-changed="onChanged" v-model="selectedPeriod" />

frontend/src/composables/useService.js

Lines changed: 12 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -255,6 +255,8 @@ export function useService(passwordDialogRef) {
255255
collectionFilters['status'] = (await executeQuery(sql_statuses)).flat()
256256
const sql_countries = "SELECT DISTINCT IFNULL(country,'') FROM coins ORDER BY country";
257257
collectionFilters['country'] = (await executeQuery(sql_countries)).flat()
258+
const sql_years = "SELECT DISTINCT IFNULL(year,'') FROM coins ORDER BY year";
259+
collectionFilters['year'] = (await executeQuery(sql_years)).flat()
258260
const sql_series = "SELECT DISTINCT IFNULL(series,'') FROM coins ORDER BY series";
259261
collectionFilters['series'] = (await executeQuery(sql_series)).flat()
260262
const sql_types = "SELECT DISTINCT IFNULL(type,'') FROM coins ORDER BY type";
@@ -268,14 +270,14 @@ export function useService(passwordDialogRef) {
268270
}
269271

270272
const loadCoins = async (search=null, sortBy=null, reverse=false, statusFilter=null, countryFilter=null,
271-
seriesFilter=null, typeFilter=null, periodFilter=null, mintFilter=null) => {
273+
yearFilter=null, seriesFilter=null, typeFilter=null, periodFilter=null, mintFilter=null) => {
272274
if (connection_type === 'local')
273-
return loadCoinsLocal(search, sortBy, reverse, statusFilter, countryFilter, seriesFilter, typeFilter, periodFilter, mintFilter);
275+
return loadCoinsLocal(search, sortBy, reverse, statusFilter, countryFilter, yearFilter, seriesFilter, typeFilter, periodFilter, mintFilter);
274276
else if (connection_type === 'remote')
275-
return loadCoinsRemote(search, sortBy, reverse, statusFilter, countryFilter, seriesFilter, typeFilter, periodFilter, mintFilter, connected_file);
277+
return loadCoinsRemote(search, sortBy, reverse, statusFilter, countryFilter, yearFilter, seriesFilter, typeFilter, periodFilter, mintFilter, connected_file);
276278
}
277279

278-
const loadCoinsRemote = async (search, sortBy, reverse, statusFilter, countryFilter, seriesFilter, typeFilter, periodFilter, mintFilter, file) => {
280+
const loadCoinsRemote = async (search, sortBy, reverse, statusFilter, countryFilter, yearFilter, seriesFilter, typeFilter, periodFilter, mintFilter, file) => {
279281
let coinsList = [];
280282

281283
await globalStatus.startLoading(i18n.global.t('Load coins'));
@@ -288,6 +290,7 @@ export function useService(passwordDialogRef) {
288290
reverse: reverse,
289291
status_filter: statusFilter,
290292
country_filter: countryFilter,
293+
year_filter: yearFilter,
291294
series_filter: seriesFilter,
292295
type_filter: typeFilter,
293296
period_filter: periodFilter,
@@ -305,7 +308,7 @@ export function useService(passwordDialogRef) {
305308
return coinsList;
306309
}
307310

308-
const loadCoinsLocal = async (search, sortBy, reverse, statusFilter, countryFilter, seriesFilter, typeFilter, periodFilter, mintFilter) => {
311+
const loadCoinsLocal = async (search, sortBy, reverse, statusFilter, countryFilter, yearFilter, seriesFilter, typeFilter, periodFilter, mintFilter) => {
309312
let sql = `
310313
SELECT coins.id, title, status, subjectshort, value, unit, year, mintmark, series, country
311314
FROM coins
@@ -324,6 +327,10 @@ export function useService(passwordDialogRef) {
324327
sql_filters.push('country = ?')
325328
params.push(countryFilter);
326329
}
330+
if (yearFilter) {
331+
sql_filters.push('year = ?')
332+
params.push(yearFilter);
333+
}
327334
if (seriesFilter) {
328335
sql_filters.push('series = ?')
329336
params.push(seriesFilter);

0 commit comments

Comments
 (0)