Skip to content

Commit bdf3867

Browse files
committed
Merge branch 'next' of github.com:devforth/adminforth into next
2 parents 0977213 + 5141f7a commit bdf3867

File tree

5 files changed

+37
-3
lines changed

5 files changed

+37
-3
lines changed

adminforth/dataConnectors/baseConnector.ts

Lines changed: 18 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -68,12 +68,28 @@ export default class AdminForthBaseConnector implements IAdminForthDataSourceCon
6868
// go through all filters in array and call validation+normalization for each
6969
// as soon as error is encountered, there is no point in calling validation for other filters
7070
// if error is not encountered all filters will be validated and normalized
71-
return filters.reduce((result, f) => {
71+
return filters.reduce((result, f, fIndex) => {
7272
if (!result.ok) {
7373
return result;
7474
}
7575

76-
return this.validateAndNormalizeFilters(f, resource);
76+
const filterValidation = this.validateAndNormalizeFilters(f, resource);
77+
78+
// in case column isArray and enumerator/foreign resource - IN filter must be transformed into OR filter
79+
if (filterValidation.ok && f.operator == AdminForthFilterOperators.IN) {
80+
const column = resource.dataSourceColumns.find((col) => col.name == (f as IAdminForthSingleFilter).field);
81+
// console.log(`\n~~~ column: ${JSON.stringify(column, null, 2)}\n~~~ resource.columns: ${JSON.stringify(resource.dataSourceColumns, null, 2)}\n~~~ filter: ${JSON.stringify(f, null, 2)}\n`);
82+
if (column.isArray?.enabled && (column.enum || column.foreignResource)) {
83+
filters[fIndex] = {
84+
operator: AdminForthFilterOperators.OR,
85+
subFilters: f.value.map((v: any) => {
86+
return { field: column.name, operator: AdminForthFilterOperators.LIKE, value: v };
87+
}),
88+
};
89+
}
90+
}
91+
92+
return filterValidation;
7793
}, { ok: true, error: '' });
7894
}
7995

adminforth/documentation/docs/tutorial/05-Plugins/11-oauth.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -244,6 +244,7 @@ plugins: [
244244
adapters: [
245245
...
246246
new AdminForthAdapterKeycloakOauth2({
247+
name: "Keycloak",
247248
clientID: process.env.KEYCLOAK_CLIENT_ID,
248249
clientSecret: process.env.KEYCLOAK_CLIENT_SECRET,
249250
keycloakUrl: process.env.KEYCLOAK_URL,

adminforth/spa/src/components/ResourceListTable.vue

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -227,7 +227,8 @@
227227
contenteditable="true"
228228
class="min-w-10 outline-none inline-block w-auto min-w-10 py-1.5 px-3 text-sm text-center text-gray-700 border border-gray-300 dark:border-gray-700 dark:text-gray-400 dark:bg-gray-800 z-10"
229229
@keydown="onPageKeydown($event)"
230-
@input="page = parseInt($event.target.innerText) || ''"
230+
@input="onPageInput($event)"
231+
@blur="validatePageInput()"
231232
>
232233
{{ pageInput }}
233234
</div>
@@ -355,6 +356,10 @@ async function onPageKeydown(event) {
355356
(!['Backspace', 'ArrowRight', 'ArrowLeft'].includes(event.code)
356357
&& isNaN(String.fromCharCode(event.keyCode)))) {
357358
event.preventDefault();
359+
if (event.code === 'Enter') {
360+
validatePageInput();
361+
event.target.blur();
362+
}
358363
}
359364
}
360365
@@ -575,6 +580,16 @@ async function startCustomAction(actionId, row) {
575580
}
576581
}
577582
583+
function onPageInput(event) {
584+
pageInput.value = event.target.innerText;
585+
}
586+
587+
function validatePageInput() {
588+
const newPage = parseInt(pageInput.value) || 1;
589+
const validPage = Math.max(1, Math.min(newPage, totalPages.value));
590+
page.value = validPage;
591+
pageInput.value = validPage.toString();
592+
}
578593
579594
</script>
580595

adminforth/types/Adapters.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,4 +33,5 @@ export interface OAuth2Adapter {
3333
getTokenFromCode(code: string, redirect_uri: string): Promise<{ email: string }>;
3434
getIcon(): string;
3535
getButtonText?(): string;
36+
getName?(): string;
3637
}

dev-demo/resources/users.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -134,6 +134,7 @@ export default {
134134
useOpenID: true,
135135
}),
136136
new AdminForthAdapterKeycloakOauth2({
137+
name: "Keycloak",
137138
clientID: process.env.KEYCLOAK_CLIENT_ID,
138139
clientSecret: process.env.KEYCLOAK_CLIENT_SECRET,
139140
keycloakUrl: process.env.KEYCLOAK_URL,

0 commit comments

Comments
 (0)