/**
 * DevExtreme (esm/__internal/ui/collection/m_collection_widget.edit.strategy.plain.js)
 * Version: 24.1.7-build-24272-1937
 * Build date: Sat Sep 28 2024
 *
 * Copyright (c) 2012 - 2024 Developer Express Inc. ALL RIGHTS RESERVED
 * Read about DevExtreme licensing here: https://js.devexpress.com/Licensing/
 */
import EditStrategy from "./m_collection_widget.edit.strategy";
const PlainEditStrategy = EditStrategy.inherit({
    _getPlainItems() {
        return this._collectionWidget.option("items") || []
    },
    getIndexByItemData(itemData) {
        const keyOf = this._collectionWidget.keyOf.bind(this._collectionWidget);
        if (keyOf) {
            return this.getIndexByKey(keyOf(itemData))
        }
        return this._getPlainItems().indexOf(itemData)
    },
    getItemDataByIndex(index) {
        return this._getPlainItems()[index]
    },
    deleteItemAtIndex(index) {
        this._getPlainItems().splice(index, 1)
    },
    itemsGetter() {
        return this._getPlainItems()
    },
    getKeysByItems(items) {
        const keyOf = this._collectionWidget.keyOf.bind(this._collectionWidget);
        let result = items;
        if (keyOf) {
            result = [];
            for (let i = 0; i < items.length; i++) {
                result.push(keyOf(items[i]))
            }
        }
        return result
    },
    getIndexByKey(key) {
        const cache = this._cache;
        const keys = cache && cache.keys || this.getKeysByItems(this._getPlainItems());
        if (cache && !cache.keys) {
            cache.keys = keys
        }
        if ("object" === typeof key) {
            for (let i = 0, {
                    length: length
                } = keys; i < length; i++) {
                if (this._equalKeys(key, keys[i])) {
                    return i
                }
            }
        } else {
            return keys.indexOf(key)
        }
        return -1
    },
    getItemsByKeys: (keys, items) => (items || keys).slice(),
    moveItemAtIndexToIndex(movingIndex, destinationIndex) {
        const items = this._getPlainItems();
        const movedItemData = items[movingIndex];
        items.splice(movingIndex, 1);
        items.splice(destinationIndex, 0, movedItemData)
    },
    _isItemIndex: index => "number" === typeof index && Math.round(index) === index,
    _getNormalizedItemIndex(itemElement) {
        return this._collectionWidget._itemElements().index(itemElement)
    },
    _normalizeItemIndex: index => index,
    _denormalizeItemIndex: index => index,
    _getItemByNormalizedIndex(index) {
        return index > -1 ? this._collectionWidget._itemElements().eq(index) : null
    },
    _itemsFromSameParent: () => true
});
export default PlainEditStrategy;
