Skip to content

Commit 17ad099

Browse files
authored
Label breadcrumb collapse menu (#6979)
Label breadcrumb collapse menu
1 parent 641446f commit 17ad099

File tree

4 files changed

+22
-7
lines changed

4 files changed

+22
-7
lines changed

packages/@react-spectrum/s2/intl/en-US.json

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,5 +17,6 @@
1717
"tag.showAllButtonLabel": "Show all ({tagCount, number})",
1818
"tag.hideButtonLabel": "Show less",
1919
"tag.actions": "Actions",
20-
"tag.noTags": "None"
20+
"tag.noTags": "None",
21+
"breadcrumbs.more": "More items"
2122
}

packages/@react-spectrum/s2/src/Breadcrumbs.tsx

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
* governing permissions and limitations under the License.
1111
*/
1212

13+
import {ActionButton} from './ActionButton';
1314
import {
1415
Breadcrumb as AriaBreadcrumb,
1516
BreadcrumbsProps as AriaBreadcrumbsProps,
@@ -29,12 +30,14 @@ import {createContext, forwardRef, Fragment, ReactNode, RefObject, useCallback,
2930
import {focusRing, getAllowedOverrides, StyleProps} from './style-utils' with {type: 'macro'};
3031
import FolderIcon from '../s2wf-icons/S2_Icon_FolderBreadcrumb_20_N.svg';
3132
import {forwardRefType} from './types';
33+
// @ts-ignore
34+
import intlMessages from '../intl/*.json';
3235
import {Menu, MenuItem, MenuTrigger} from './Menu';
33-
import {ActionButton as S2ActionButton} from './ActionButton';
3436
import {size, style} from '../style/spectrum-theme' with { type: 'macro' };
3537
import {Text} from './Content';
3638
import {useDOMRef, useResizeObserver} from '@react-spectrum/utils';
3739
import {useLayoutEffect} from '@react-aria/utils';
40+
import {useLocalizedStringFormatter} from '@react-aria/i18n';
3841
import {useSpectrumContextProps} from './useSpectrumContextProps';
3942

4043
const MIN_VISIBLE_ITEMS = 1;
@@ -128,15 +131,16 @@ function Breadcrumbs<T extends object>(props: BreadcrumbsProps<T>, ref: DOMRef<H
128131
}
129132

130133
let BreadcrumbMenu = (props: {items: Array<Node<any>>, onAction: BreadcrumbsProps<unknown>['onAction']}) => {
134+
let stringFormatter = useLocalizedStringFormatter(intlMessages, '@react-spectrum/s2');
131135
let {items, onAction} = props;
132136
let {direction} = useLocale();
133137
let {size, isDisabled} = useContext(InternalBreadcrumbsContext);
134-
// TODO localize See more
138+
let label = stringFormatter.format('breadcrumbs.more');
135139
return (
136140
<UNSTABLE_CollectionRendererContext.Provider value={UNSTABLE_DefaultCollectionRenderer}>
137141
<li className={breadcrumbStyles({size, isDisabled, isMenu: true})}>
138142
<MenuTrigger>
139-
<S2ActionButton isDisabled={isDisabled} isQuiet aria-label="See more"><FolderIcon /></S2ActionButton>
143+
<ActionButton isDisabled={isDisabled} isQuiet aria-label={label}><FolderIcon /></ActionButton>
140144
<Menu items={items} onAction={onAction}>
141145
{(item: Node<any>) => (
142146
<MenuItem
@@ -193,7 +197,7 @@ let HiddenBreadcrumbs = function (props: {listRef: RefObject<HTMLDivElement | nu
193197
</div>
194198
);
195199
})}
196-
<S2ActionButton data-hidden-button isQuiet><FolderIcon /></S2ActionButton>
200+
<ActionButton data-hidden-button isQuiet><FolderIcon /></ActionButton>
197201
</div>
198202
);
199203
};

packages/react-aria-components/src/Breadcrumbs.tsx

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99
* OF ANY KIND, either express or implied. See the License for the specific language
1010
* governing permissions and limitations under the License.
1111
*/
12-
import {AriaBreadcrumbsProps} from 'react-aria';
12+
import {AriaBreadcrumbsProps, useBreadcrumbs} from 'react-aria';
1313
import {Collection, CollectionBuilder, createLeafComponent} from '@react-aria/collections';
1414
import {CollectionProps, CollectionRendererContext} from './Collection';
1515
import {ContextValue, RenderProps, SlotProps, StyleProps, useContextProps, useRenderProps, useSlottedContext} from './utils';
@@ -31,13 +31,14 @@ export const BreadcrumbsContext = createContext<ContextValue<BreadcrumbsProps<an
3131
function Breadcrumbs<T extends object>(props: BreadcrumbsProps<T>, ref: ForwardedRef<HTMLOListElement>) {
3232
[props, ref] = useContextProps(props, ref, BreadcrumbsContext);
3333
let {CollectionRoot} = useContext(CollectionRendererContext);
34+
let {navProps} = useBreadcrumbs(props);
3435

3536
return (
3637
<CollectionBuilder content={<Collection {...props} />}>
3738
{collection => (
3839
<ol
3940
ref={ref}
40-
{...filterDOMProps(props, {labelable: true})}
41+
{...navProps}
4142
slot={props.slot || undefined}
4243
style={props.style}
4344
className={props.className ?? 'react-aria-Breadcrumbs'}>

scripts/migrateIntl.mjs

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ let mapToNewKeys = {
1111
};
1212

1313
let stringsToAllow = new Set([
14+
'breadcrumbs.more',
1415
'menu.moreActions',
1516
'dialog.alert',
1617
'contextualhelp.info',
@@ -103,6 +104,14 @@ console.log(packs)
103104

104105
for (let [key, value] of packs) {
105106
let dest = path.join(__dirname, '../packages/@react-spectrum/s2/intl', `${key}.json`);
107+
if (fs.existsSync(dest)) {
108+
let translations = fs.readJsonSync(dest);
109+
for (let [name, message] of Object.entries(translations)) {
110+
if (!value[name]) {
111+
value[name] = message;
112+
}
113+
}
114+
}
106115
fs.writeFile(dest, JSON.stringify(value, null, 2));
107116
}
108117

0 commit comments

Comments
 (0)