"use strict";
/*---------------------------------------------------------------------------------------------
* Copyright (c) Bentley Systems, Incorporated. All rights reserved.
* See LICENSE.md in the project root for license terms and full copyright notice.
*--------------------------------------------------------------------------------------------*/
/* eslint-disable deprecation/deprecation */
/** @packageDocumentation
 * @module Toolbar
 */
Object.defineProperty(exports, "__esModule", { value: true });
exports.useUiItemsProviderToolbarItems = void 0;
const React = require("react");
const appui_abstract_1 = require("@itwin/appui-abstract");
const useActiveStageId_1 = require("../hooks/useActiveStageId");
const useAvailableUiItemsProviders_1 = require("../hooks/useAvailableUiItemsProviders");
const UiFramework_1 = require("../UiFramework");
/** Hook that returns items from [[ToolbarItemsManager]].
 * @public
 */
const useUiItemsProviderToolbarItems = (manager, toolbarUsage, toolbarOrientation) => {
    const uiItemsProviderIds = (0, useAvailableUiItemsProviders_1.useAvailableUiItemsProviders)();
    const stageId = (0, useActiveStageId_1.useActiveStageId)();
    const [items, setItems] = React.useState(manager.items);
    const providersRef = React.useRef("");
    const currentStageRef = React.useRef("");
    // gathers items from registered extensions - dependent on when a uiItemsProvider is register or unregistered and if the
    // current stage's composer allows entries from extensions.
    React.useEffect(() => {
        const uiProviders = uiItemsProviderIds.join("-");
        const handleChanged = (args) => {
            setItems(args.items);
        };
        manager.onItemsChanged.addListener(handleChanged);
        // istanbul ignore else
        if (providersRef.current !== uiProviders || currentStageRef.current !== stageId) {
            const frontstageDef = UiFramework_1.UiFramework.frontstages.activeFrontstageDef;
            // istanbul ignore else
            if (frontstageDef) {
                const usage = frontstageDef.usage;
                const applicationData = frontstageDef.applicationData;
                currentStageRef.current = stageId;
                providersRef.current = uiProviders;
                const toolbarItems = appui_abstract_1.UiItemsManager.getToolbarButtonItems(stageId, usage, toolbarUsage, toolbarOrientation, applicationData);
                manager.loadItems(toolbarItems);
                setItems(manager.items);
            }
        }
        return () => {
            manager.onItemsChanged.removeListener(handleChanged);
        };
    }, [uiItemsProviderIds, stageId, manager, toolbarUsage, toolbarOrientation]);
    return items;
};
exports.useUiItemsProviderToolbarItems = useUiItemsProviderToolbarItems;
//# sourceMappingURL=useUiItemsProviderToolbarItems.js.map