@byline/admin 2.6.0 → 2.6.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/fields/relation/relation-display.d.ts +1 -1
- package/dist/fields/relation/relation-display.js +4 -1
- package/dist/fields/relation/relation-picker.d.ts +11 -1
- package/dist/fields/relation/relation-picker.js +3 -2
- package/package.json +5 -5
- package/src/fields/relation/relation-display.tsx +9 -1
- package/src/fields/relation/relation-picker.tsx +18 -1
|
@@ -37,4 +37,4 @@ export declare function resolveRowLabel(doc: Record<string, any> | null | undefi
|
|
|
37
37
|
* Returns `undefined` when no target definition is available, leaving the
|
|
38
38
|
* listing endpoint to decide its own default projection.
|
|
39
39
|
*/
|
|
40
|
-
export declare function resolveSelectFields(def: CollectionDefinition | null | undefined, displayField: string | undefined, pickerColumns: ColumnDefinition[] | undefined): string[] | undefined;
|
|
40
|
+
export declare function resolveSelectFields(def: CollectionDefinition | null | undefined, displayField: string | undefined, pickerColumns: ColumnDefinition[] | undefined, extraFields?: string[]): string[] | undefined;
|
|
@@ -40,7 +40,7 @@ function resolveRowLabel(doc, displayField) {
|
|
|
40
40
|
if ('string' == typeof doc.path && doc.path.length > 0) return doc.path;
|
|
41
41
|
return null;
|
|
42
42
|
}
|
|
43
|
-
function resolveSelectFields(def, displayField, pickerColumns) {
|
|
43
|
+
function resolveSelectFields(def, displayField, pickerColumns, extraFields) {
|
|
44
44
|
if (!def) return;
|
|
45
45
|
const out = new Set();
|
|
46
46
|
if (displayField) out.add(displayField);
|
|
@@ -51,6 +51,9 @@ function resolveSelectFields(def, displayField, pickerColumns) {
|
|
|
51
51
|
const name = String(col.fieldName);
|
|
52
52
|
if (def.fields.some((f)=>f.name === name)) out.add(name);
|
|
53
53
|
}
|
|
54
|
+
if (extraFields) {
|
|
55
|
+
for (const name of extraFields)if (def.fields.some((f)=>f.name === name)) out.add(name);
|
|
56
|
+
}
|
|
54
57
|
if (def.fields.some((f)=>'title' === f.name)) out.add('title');
|
|
55
58
|
if (0 === out.size) return;
|
|
56
59
|
return Array.from(out);
|
|
@@ -25,6 +25,16 @@ interface RelationPickerProps {
|
|
|
25
25
|
targetDefinition?: CollectionDefinition | null;
|
|
26
26
|
/** Explicit display field to render as row label. */
|
|
27
27
|
displayField?: string;
|
|
28
|
+
/**
|
|
29
|
+
* Extra field names to load into each row's `record.fields` beyond the
|
|
30
|
+
* display columns. Not rendered — available to the `onSelect` consumer
|
|
31
|
+
* (e.g. the inline-image modal seeding alt-text from the picked media).
|
|
32
|
+
*
|
|
33
|
+
* Pass a stable (module-level) array — this feeds the fetch effect's
|
|
34
|
+
* dependency list, so a fresh array each render would refetch on every
|
|
35
|
+
* render.
|
|
36
|
+
*/
|
|
37
|
+
extraSelectFields?: string[];
|
|
28
38
|
/** Modal open/close state. */
|
|
29
39
|
isOpen: boolean;
|
|
30
40
|
/**
|
|
@@ -45,5 +55,5 @@ interface RelationPickerProps {
|
|
|
45
55
|
/** Called when the user dismisses the modal. */
|
|
46
56
|
onDismiss: () => void;
|
|
47
57
|
}
|
|
48
|
-
export declare const RelationPicker: ({ targetCollectionPath, targetDefinition, displayField, isOpen, onSelect, onDismiss, }: RelationPickerProps) => import("react").JSX.Element;
|
|
58
|
+
export declare const RelationPicker: ({ targetCollectionPath, targetDefinition, displayField, extraSelectFields, isOpen, onSelect, onDismiss, }: RelationPickerProps) => import("react").JSX.Element;
|
|
49
59
|
export {};
|
|
@@ -8,7 +8,7 @@ import { useBylineFieldServices } from "../field-services-context.js";
|
|
|
8
8
|
import { PickerCell, resolveFallbackDisplayField, resolveRowLabel, resolveSelectFields } from "./relation-display.js";
|
|
9
9
|
import relation_picker_module from "./relation-picker.module.js";
|
|
10
10
|
const PAGE_SIZE = 15;
|
|
11
|
-
const RelationPicker = ({ targetCollectionPath, targetDefinition, displayField, isOpen, onSelect, onDismiss })=>{
|
|
11
|
+
const RelationPicker = ({ targetCollectionPath, targetDefinition, displayField, extraSelectFields, isOpen, onSelect, onDismiss })=>{
|
|
12
12
|
const [query, setQuery] = useState('');
|
|
13
13
|
const [page, setPage] = useState(1);
|
|
14
14
|
const { t } = useTranslation('byline-admin');
|
|
@@ -34,7 +34,7 @@ const RelationPicker = ({ targetCollectionPath, targetDefinition, displayField,
|
|
|
34
34
|
useEffect(()=>{
|
|
35
35
|
if (!isOpen) return;
|
|
36
36
|
let cancelled = false;
|
|
37
|
-
const selectFields = resolveSelectFields(targetDefinition, displayField, pickerColumns);
|
|
37
|
+
const selectFields = resolveSelectFields(targetDefinition, displayField, pickerColumns, extraSelectFields);
|
|
38
38
|
setLoading(true);
|
|
39
39
|
setError(null);
|
|
40
40
|
getCollectionDocuments({
|
|
@@ -65,6 +65,7 @@ const RelationPicker = ({ targetCollectionPath, targetDefinition, displayField,
|
|
|
65
65
|
query,
|
|
66
66
|
page,
|
|
67
67
|
displayField,
|
|
68
|
+
extraSelectFields,
|
|
68
69
|
targetDefinition,
|
|
69
70
|
pickerColumns,
|
|
70
71
|
getCollectionDocuments,
|
package/package.json
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
"name": "@byline/admin",
|
|
3
3
|
"private": false,
|
|
4
4
|
"license": "MPL-2.0",
|
|
5
|
-
"version": "2.6.
|
|
5
|
+
"version": "2.6.1",
|
|
6
6
|
"engines": {
|
|
7
7
|
"node": ">=20.9.0"
|
|
8
8
|
},
|
|
@@ -147,10 +147,10 @@
|
|
|
147
147
|
"uuid": "^14.0.0",
|
|
148
148
|
"zod": "^4.4.3",
|
|
149
149
|
"zod-form-data": "^3.0.1",
|
|
150
|
-
"@byline/
|
|
151
|
-
"@byline/
|
|
152
|
-
"@byline/
|
|
153
|
-
"@byline/
|
|
150
|
+
"@byline/core": "2.6.1",
|
|
151
|
+
"@byline/auth": "2.6.1",
|
|
152
|
+
"@byline/ui": "2.6.1",
|
|
153
|
+
"@byline/i18n": "2.6.1"
|
|
154
154
|
},
|
|
155
155
|
"peerDependencies": {
|
|
156
156
|
"react": "^19.0.0",
|
|
@@ -110,7 +110,8 @@ export function resolveRowLabel(
|
|
|
110
110
|
export function resolveSelectFields(
|
|
111
111
|
def: CollectionDefinition | null | undefined,
|
|
112
112
|
displayField: string | undefined,
|
|
113
|
-
pickerColumns: ColumnDefinition[] | undefined
|
|
113
|
+
pickerColumns: ColumnDefinition[] | undefined,
|
|
114
|
+
extraFields?: string[]
|
|
114
115
|
): string[] | undefined {
|
|
115
116
|
if (!def) return undefined
|
|
116
117
|
const out = new Set<string>()
|
|
@@ -124,6 +125,13 @@ export function resolveSelectFields(
|
|
|
124
125
|
if (def.fields.some((f) => f.name === name)) out.add(name)
|
|
125
126
|
}
|
|
126
127
|
}
|
|
128
|
+
// Extra non-display fields a consumer needs on `record.fields` (e.g. the
|
|
129
|
+
// inline-image modal seeding alt-text). Loaded but not rendered as columns.
|
|
130
|
+
if (extraFields) {
|
|
131
|
+
for (const name of extraFields) {
|
|
132
|
+
if (def.fields.some((f) => f.name === name)) out.add(name)
|
|
133
|
+
}
|
|
134
|
+
}
|
|
127
135
|
if (def.fields.some((f) => f.name === 'title')) out.add('title')
|
|
128
136
|
if (out.size === 0) return undefined
|
|
129
137
|
return Array.from(out)
|
|
@@ -46,6 +46,16 @@ interface RelationPickerProps {
|
|
|
46
46
|
targetDefinition?: CollectionDefinition | null
|
|
47
47
|
/** Explicit display field to render as row label. */
|
|
48
48
|
displayField?: string
|
|
49
|
+
/**
|
|
50
|
+
* Extra field names to load into each row's `record.fields` beyond the
|
|
51
|
+
* display columns. Not rendered — available to the `onSelect` consumer
|
|
52
|
+
* (e.g. the inline-image modal seeding alt-text from the picked media).
|
|
53
|
+
*
|
|
54
|
+
* Pass a stable (module-level) array — this feeds the fetch effect's
|
|
55
|
+
* dependency list, so a fresh array each render would refetch on every
|
|
56
|
+
* render.
|
|
57
|
+
*/
|
|
58
|
+
extraSelectFields?: string[]
|
|
49
59
|
/** Modal open/close state. */
|
|
50
60
|
isOpen: boolean
|
|
51
61
|
/**
|
|
@@ -73,6 +83,7 @@ export const RelationPicker = ({
|
|
|
73
83
|
targetCollectionPath,
|
|
74
84
|
targetDefinition,
|
|
75
85
|
displayField,
|
|
86
|
+
extraSelectFields,
|
|
76
87
|
isOpen,
|
|
77
88
|
onSelect,
|
|
78
89
|
onDismiss,
|
|
@@ -108,7 +119,12 @@ export const RelationPicker = ({
|
|
|
108
119
|
if (!isOpen) return
|
|
109
120
|
let cancelled = false
|
|
110
121
|
|
|
111
|
-
const selectFields = resolveSelectFields(
|
|
122
|
+
const selectFields = resolveSelectFields(
|
|
123
|
+
targetDefinition,
|
|
124
|
+
displayField,
|
|
125
|
+
pickerColumns,
|
|
126
|
+
extraSelectFields
|
|
127
|
+
)
|
|
112
128
|
|
|
113
129
|
setLoading(true)
|
|
114
130
|
setError(null)
|
|
@@ -144,6 +160,7 @@ export const RelationPicker = ({
|
|
|
144
160
|
query,
|
|
145
161
|
page,
|
|
146
162
|
displayField,
|
|
163
|
+
extraSelectFields,
|
|
147
164
|
targetDefinition,
|
|
148
165
|
pickerColumns,
|
|
149
166
|
getCollectionDocuments,
|