Skip to content

Commit 463611d

Browse files
Merge pull request #1507 from unfoldingWord/abelpz-chapter-verse-filter
added chapter and verse filters for tsv
2 parents 75bb9d4 + f8e15de commit 463611d

File tree

5 files changed

+147
-12
lines changed

5 files changed

+147
-12
lines changed

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@
3535
"@material-ui/styles": "^4.11.3",
3636
"axios": "^0.21.0",
3737
"bible-reference-range": "^1.0.1",
38-
"datatable-translatable": "1.0.15",
38+
"datatable-translatable": "^1.0.16",
3939
"deep-freeze": "^0.0.1",
4040
"gitea-react-toolkit": "2.2.3",
4141
"lodash.isequal": "^4.5.0",

public/build_number

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
207-408b416
1+
210-1dcfb53
Lines changed: 73 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,73 @@
1+
import { FormControl, InputLabel, ListItemText, MenuItem, Select, Box } from "@material-ui/core";
2+
import React, { useState } from "react";
3+
import { useDeepCompareCallback } from "use-deep-compare";
4+
5+
const SelectSimple = ({options,onChange,label,value,...props}) => {
6+
return (
7+
<FormControl {...props}>
8+
<InputLabel htmlFor='select-multiple-chip'>
9+
{label}
10+
</InputLabel>
11+
<Select
12+
value={value}
13+
renderValue={selected => selected}
14+
onChange={onChange}
15+
>
16+
{options.map(item => (
17+
<MenuItem key={item} value={item}>
18+
<ListItemText primary={item} />
19+
</MenuItem>
20+
))}
21+
</Select>
22+
</FormControl>
23+
)
24+
}
25+
26+
const column = { name: "Reference", filterType: "custom" };
27+
28+
const ChapterVerseFilters = ({ cvData, filters, onChange, index }) => {
29+
const [chapter, setChapter] = useState("All");
30+
const [verse, setVerse] = useState("All");
31+
32+
const handleChapterChange = useDeepCompareCallback((event) => {
33+
event.preventDefault();
34+
const chapter = event.target.value;
35+
const verse = "All";
36+
setChapter(chapter);
37+
setVerse(verse);
38+
if (chapter === "All") {
39+
onChange([], index, column);
40+
return;
41+
}
42+
filters[index] = cvData[chapter].map((verse) => `${chapter}:${verse}`)
43+
onChange(filters[index], index, column)
44+
}, [onChange,index,filters,cvData])
45+
46+
const handleVerseChange = useDeepCompareCallback((event) => {
47+
event.preventDefault()
48+
if (chapter === "All") return;
49+
const verse = event.target.value;
50+
filters[index] = [`${chapter}:${verse}`]
51+
onChange(filters[index], index, column)
52+
setVerse(verse);
53+
}, [onChange,index,filters,chapter])
54+
55+
return (
56+
<Box sx={{display:"grid", gridTemplateColumns: "1fr 1fr", gap: "17px"}}>
57+
<SelectSimple
58+
value={chapter}
59+
label={"Chapter"}
60+
onChange={handleChapterChange}
61+
options={["All", ...Object.keys(cvData)]}
62+
/>
63+
<SelectSimple
64+
value={verse}
65+
label={"Verse"}
66+
onChange={handleVerseChange}
67+
options={["All", ...(cvData[chapter] || [])]}
68+
/>
69+
</Box>
70+
)
71+
}
72+
73+
export default ChapterVerseFilters;

src/components/translatable/TranslatableTSV.js

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@ import {
2929
compositeKeyIndicesFromColumnNames,
3030
generateRowId,
3131
} from './helpers';
32+
import ChapterVerseFilters from './ChapterVerseFilters';
3233

3334
const delimiters = { row: '\n', cell: '\t' };
3435

@@ -133,6 +134,40 @@ export default function TranslatableTSV({
133134
return _config;
134135
}, [columnNames, rowHeader]);
135136

137+
const REF_FILTER_INDEX = 1;
138+
139+
const chapterVerseFilter = {
140+
name: "ChapterVerse",
141+
options: {
142+
empty: true,
143+
display: "excluded",
144+
filterType: "custom",
145+
filterOptions: {
146+
//TODO: modify logic to allow search strings like `1:5-6`, etc.
147+
logic: (location, filters, row) => {
148+
if (filters.length) return !filters.includes(row[0]);
149+
return false;
150+
},
151+
display: (filterList, onChange, _index, column, filterData) => {
152+
const filterValues = filterData[REF_FILTER_INDEX].reduce(
153+
(cv, reference, i) => {
154+
const [chapter, verse] = reference.replace('\t', "").split(":");
155+
if(!cv[chapter]) cv[chapter] = [];
156+
cv[chapter].push(verse)
157+
return cv;
158+
},
159+
{}
160+
);
161+
const index = REF_FILTER_INDEX;
162+
console.log({ filterList, onChange, index, column, filterData });
163+
const optionValues = filterValues;
164+
return <ChapterVerseFilters onChange={onChange} cvData={optionValues} filters={filterList} index={index}/>
165+
},
166+
fullWidth: true
167+
}
168+
}
169+
}
170+
136171
return (
137172
<ResourcesContextProvider
138173
reference={{ bookId }}
@@ -155,6 +190,7 @@ export default function TranslatableTSV({
155190
generateRowId={_generateRowId}
156191
options={options}
157192
parser={parser}
193+
columns={[chapterVerseFilter]}
158194
translationFontFamily={selectedFont}
159195
/>
160196
{validationComponent}

yarn.lock

Lines changed: 36 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1315,7 +1315,7 @@
13151315
dependencies:
13161316
regenerator-runtime "^0.13.4"
13171317

1318-
"@babel/runtime@^7.0.0", "@babel/runtime@^7.12.0", "@babel/runtime@^7.12.5", "@babel/runtime@^7.13.10", "@babel/runtime@^7.3.1", "@babel/runtime@^7.3.4", "@babel/runtime@^7.4.4", "@babel/runtime@^7.5.5", "@babel/runtime@^7.7.2", "@babel/runtime@^7.7.6", "@babel/runtime@^7.8.3", "@babel/runtime@^7.8.4", "@babel/runtime@^7.8.7", "@babel/runtime@^7.9.2":
1318+
"@babel/runtime@^7.0.0", "@babel/runtime@^7.12.0", "@babel/runtime@^7.12.5", "@babel/runtime@^7.13.10", "@babel/runtime@^7.3.1", "@babel/runtime@^7.3.4", "@babel/runtime@^7.4.4", "@babel/runtime@^7.5.5", "@babel/runtime@^7.7.2", "@babel/runtime@^7.7.6", "@babel/runtime@^7.8.3", "@babel/runtime@^7.8.4", "@babel/runtime@^7.8.7":
13191319
version "7.18.3"
13201320
resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.18.3.tgz#c7b654b57f6f63cf7f8b418ac9ca04408c4579f4"
13211321
integrity sha512-38Y8f7YUhce/K7RMwTp7m0uCumpv9hZkitCbBClqQIow1qSbCvGkcegKOXpEWCQLfWmevgRiWokZ1GkpfhbZug==
@@ -1329,6 +1329,13 @@
13291329
dependencies:
13301330
regenerator-runtime "^0.13.4"
13311331

1332+
"@babel/runtime@^7.9.2":
1333+
version "7.20.7"
1334+
resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.20.7.tgz#fcb41a5a70550e04a7b708037c7c32f7f356d8fd"
1335+
integrity sha512-UF0tvkUtxwAgZ5W/KrkHf0Rn0fdnLDU9ScxBrEVNUprE/MzirjK4MJUX1/BVDv00Sv8cljtukVK1aky++X1SjQ==
1336+
dependencies:
1337+
regenerator-runtime "^0.13.11"
1338+
13321339
"@babel/template@^7.16.7", "@babel/template@^7.4.0", "@babel/template@^7.4.4", "@babel/template@^7.8.6":
13331340
version "7.16.7"
13341341
resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.16.7.tgz#8d126c8701fde4d66b264b3eba3d96f07666d155"
@@ -4840,11 +4847,16 @@ clone@^1.0.2:
48404847
resolved "https://registry.yarnpkg.com/clone/-/clone-1.0.4.tgz#da309cc263df15994c688ca902179ca3c7cd7c7e"
48414848
integrity sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==
48424849

4843-
clsx@^1.0.4, clsx@^1.1.1:
4850+
clsx@^1.0.4:
48444851
version "1.1.1"
48454852
resolved "https://registry.yarnpkg.com/clsx/-/clsx-1.1.1.tgz#98b3134f9abbdf23b2663491ace13c5c03a73188"
48464853
integrity sha512-6/bPho624p3S2pMyvP5kKBPXnI3ufHLObBFCfgx+LkeR5lg2XYy2hqZqUf45ypD8COn2bhgGJSUE+l5dhNBieA==
48474854

4855+
clsx@^1.1.1:
4856+
version "1.2.1"
4857+
resolved "https://registry.yarnpkg.com/clsx/-/clsx-1.2.1.tgz#0ddc4a20a549b59c93a4116bb26f5294ca17dc12"
4858+
integrity sha512-EcR6r5a8bj6pu3ycsa/E/cKVGuTgZJZdsyUYHOksG/UHIiKfjxzRxYJpyVBwYaQeOvghal9fcc4PidlgzugAQg==
4859+
48484860
cmd-shim@^4.0.1:
48494861
version "4.1.0"
48504862
resolved "https://registry.yarnpkg.com/cmd-shim/-/cmd-shim-4.1.0.tgz#b3a904a6743e9fede4148c6f3800bf2a08135bdd"
@@ -5659,10 +5671,10 @@ data-urls@^1.0.0, data-urls@^1.1.0:
56595671
whatwg-mimetype "^2.2.0"
56605672
whatwg-url "^7.0.0"
56615673

5662-
datatable-translatable@1.0.15:
5663-
version "1.0.15"
5664-
resolved "https://registry.yarnpkg.com/datatable-translatable/-/datatable-translatable-1.0.15.tgz#3b1c75ab0c49152e7d19fccf085f0d6954447aed"
5665-
integrity sha512-X3IMcqrQMQIUwq/vCiXfu7wrcTaObVQPdetnIzMmTBGWEf5I0VPASdbeL+ioVuF4L1j1IAiyP7TcVqqpf6EdAw==
5674+
datatable-translatable@^1.0.16:
5675+
version "1.0.16"
5676+
resolved "https://registry.yarnpkg.com/datatable-translatable/-/datatable-translatable-1.0.16.tgz#0868adad5bc818418fd6dd4982b18bf2445f3a92"
5677+
integrity sha512-rwKUIApCLa7Cqui4Qd+WDd7yvRghVVEvmkBfBAu1KcSl+2gPSQogspWYN/1PBpBdbm9KUmvan510Vqg/JNbiEw==
56665678
dependencies:
56675679
deep-freeze "^0.0.1"
56685680
lodash.isequal "^4.5.0"
@@ -10759,7 +10771,7 @@ loader-utils@1.2.3:
1075910771
emojis-list "^2.0.0"
1076010772
json5 "^1.0.1"
1076110773

10762-
loader-utils@^1.0.1, loader-utils@^1.0.2, loader-utils@^1.1.0, loader-utils@^1.2.3, loader-utils@^1.4.0:
10774+
loader-utils@^1.0.1, loader-utils@^1.0.2, loader-utils@^1.1.0, loader-utils@^1.2.3:
1076310775
version "1.4.0"
1076410776
resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-1.4.0.tgz#c579b5e34cb34b1a74edc6c1fb36bfa371d5a613"
1076510777
integrity sha512-qH0WSMBtn/oHuwjy/NucEgbx5dbxxnxup9s4PVXJUDHZBQY+s0NWA9rJf53RBnQZxfch7euUui7hpoAPvALZdA==
@@ -10768,6 +10780,15 @@ loader-utils@^1.0.1, loader-utils@^1.0.2, loader-utils@^1.1.0, loader-utils@^1.2
1076810780
emojis-list "^3.0.0"
1076910781
json5 "^1.0.1"
1077010782

10783+
loader-utils@^1.4.0:
10784+
version "1.4.2"
10785+
resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-1.4.2.tgz#29a957f3a63973883eb684f10ffd3d151fec01a3"
10786+
integrity sha512-I5d00Pd/jwMD2QCduo657+YM/6L3KZu++pmX9VFncxaxvHcru9jx1lBaFft+r4Mt2jK0Yhp41XlRAihzPxHNCg==
10787+
dependencies:
10788+
big.js "^5.2.2"
10789+
emojis-list "^3.0.0"
10790+
json5 "^1.0.1"
10791+
1077110792
loader-utils@^2.0.0:
1077210793
version "2.0.2"
1077310794
resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-2.0.2.tgz#d6e3b4fb81870721ae4e0868ab11dd638368c129"
@@ -14410,9 +14431,9 @@ react-test-renderer@^16.13.1:
1441014431
scheduler "^0.19.1"
1441114432

1441214433
react-to-print@^2.8.0:
14413-
version "2.14.7"
14414-
resolved "https://registry.yarnpkg.com/react-to-print/-/react-to-print-2.14.7.tgz#d288de0e573e6e63e203a48d4bad7a1759d18688"
14415-
integrity sha512-lWVVAs9Co25uyE0toxcWeFsmaZObwUozXrJD9WMpDPclpBgk+WIzxlt3Q3omL/BCBG/cpf0XNvhayUWa+99YGw==
14434+
version "2.14.11"
14435+
resolved "https://registry.yarnpkg.com/react-to-print/-/react-to-print-2.14.11.tgz#14ce17fce6ed238ae08c8c375c13847eb1aefbac"
14436+
integrity sha512-sePHBaCtZLp8/g4d/gRyI9XQZkveZq6xoukanAHfkzlXOa7sTuXCEQOYq37lIa5MkUoxySdJxYuyClaXPa9Zpg==
1441614437
dependencies:
1441714438
prop-types "^15.8.1"
1441814439

@@ -14674,6 +14695,11 @@ regenerator-runtime@^0.12.0:
1467414695
resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.12.1.tgz#fa1a71544764c036f8c49b13a08b2594c9f8a0de"
1467514696
integrity sha512-odxIc1/vDlo4iZcfXqRYFj0vpXFNoGdKMAUieAlFYO6m/nl5e9KR/beGf41z4a1FI+aQgtjhuaSlDxQ0hmkrHg==
1467614697

14698+
regenerator-runtime@^0.13.11:
14699+
version "0.13.11"
14700+
resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz#f6dca3e7ceec20590d07ada785636a90cdca17f9"
14701+
integrity sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==
14702+
1467714703
regenerator-runtime@^0.13.3, regenerator-runtime@^0.13.4, regenerator-runtime@^0.13.7:
1467814704
version "0.13.9"
1467914705
resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.13.9.tgz#8925742a98ffd90814988d7566ad30ca3b263b52"

0 commit comments

Comments
 (0)