@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
42 lines • 2.13 kB
JavaScript
// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
// SPDX-License-Identifier: Apache-2.0
import { useRef } from 'react';
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