@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.
@@ -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.0",
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/auth": "2.6.0",
151
- "@byline/core": "2.6.0",
152
- "@byline/i18n": "2.6.0",
153
- "@byline/ui": "2.6.0"
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(targetDefinition, displayField, pickerColumns)
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,