@awsui/components-react
Version:
On July 19th, 2022, we launched [Cloudscape Design System](https://cloudscape.design). Cloudscape is an evolution of AWS-UI. It consists of user interface guidelines, front-end components, design resources, and development tools for building intuitive, en
50 lines • 2.63 kB
JavaScript
// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
// SPDX-License-Identifier: Apache-2.0
import { useRef } from 'react';
export const formatDndStarted = format => (position, total) => format({ position, total });
export const formatDndItemReordered = format => (initialPosition, currentPosition, total) => format({ currentPosition, total, isInitialPosition: `${initialPosition === currentPosition}` });
export const formatDndItemCommitted = format => (initialPosition, finalPosition, total) => format({
initialPosition,
finalPosition,
total,
isInitialPosition: `${initialPosition === finalPosition}`,
});
export default function useLiveAnnouncements({ items, itemDefinition, isDragging, liveAnnouncementDndStarted, liveAnnouncementDndItemReordered, liveAnnouncementDndItemCommitted, liveAnnouncementDndDiscarded, }) {
const isFirstAnnouncement = useRef(true);
if (!isDragging) {
isFirstAnnouncement.current = true;
}
return {
onDragStart({ active }) {
if (active && liveAnnouncementDndStarted) {
const index = items.findIndex(item => itemDefinition.id(item) === active.id);
return liveAnnouncementDndStarted(index + 1, items.length);
}
},
onDragOver({ active, over }) {
if (liveAnnouncementDndItemReordered) {
// Don't announce on the first dragOver because it's redundant with onDragStart.
if (isFirstAnnouncement.current) {
isFirstAnnouncement.current = false;
if (!over || over.id === active.id) {
return;
}
}
const initialIndex = items.findIndex(item => itemDefinition.id(item) === active.id);
const currentIdex = over ? items.findIndex(item => itemDefinition.id(item) === over.id) : initialIndex;
return liveAnnouncementDndItemReordered(initialIndex + 1, currentIdex + 1, items.length);
}
},
onDragEnd({ active, over }) {
if (liveAnnouncementDndItemCommitted) {
const initialIndex = items.findIndex(item => itemDefinition.id(item) === active.id);
const finalIndex = over ? items.findIndex(item => itemDefinition.id(item) === over.id) : initialIndex;
return liveAnnouncementDndItemCommitted(initialIndex + 1, finalIndex + 1, items.length);
}
},
onDragCancel() {
return liveAnnouncementDndDiscarded;
},
};
}
//# sourceMappingURL=use-live-announcements.js.map