diff --git a/frontend/src/app/main/ui/ds.cljs b/frontend/src/app/main/ui/ds.cljs index 5633f9d6b2..0c17ed51b2 100644 --- a/frontend/src/app/main/ui/ds.cljs +++ b/frontend/src/app/main/ui/ds.cljs @@ -13,7 +13,6 @@ [app.main.ui.ds.controls.input :refer [input*]] [app.main.ui.ds.controls.numeric-input :refer [numeric-input*]] [app.main.ui.ds.controls.select :refer [select*]] - [app.main.ui.ds.controls.token-input :refer [token-input*]] [app.main.ui.ds.controls.utilities.hint-message :refer [hint-message*]] [app.main.ui.ds.controls.utilities.input-field :refer [input-field*]] [app.main.ui.ds.controls.utilities.label :refer [label*]] @@ -65,7 +64,6 @@ :Text text* :TabSwitcher tab-switcher* :Toast toast* - :TokenInput token-input* :Tooltip tooltip* :ContextNotification context-notification* :NotificationPill notification-pill* diff --git a/frontend/src/app/main/ui/ds/controls/token-input.stories.jsx b/frontend/src/app/main/ui/ds/controls/token-input.stories.jsx deleted file mode 100644 index 6b481cccf8..0000000000 --- a/frontend/src/app/main/ui/ds/controls/token-input.stories.jsx +++ /dev/null @@ -1,26 +0,0 @@ -// This Source Code Form is subject to the terms of the Mozilla Public -// License, v. 2.0. If a copy of the MPL was not distributed with this -// file, You can obtain one at http://mozilla.org/MPL/2.0/. -// -// Copyright (c) KALEIDOS INC -import * as React from "react"; -import Components from "@target/components"; - -const { TokenInput } = Components; - -export default { - title: "Controls/Token Input", - component: TokenInput, - argTypes: { - - }, - args: { - - }, - parameters: { - - }, - render: ({ ...args }) => , -}; - -export const Default = {}; \ No newline at end of file diff --git a/frontend/src/app/main/ui/ds/controls/token_input.cljs b/frontend/src/app/main/ui/ds/controls/token_input.cljs deleted file mode 100644 index 58f8442e08..0000000000 --- a/frontend/src/app/main/ui/ds/controls/token_input.cljs +++ /dev/null @@ -1,172 +0,0 @@ -;; This Source Code Form is subject to the terms of the Mozilla Public -;; License, v. 2.0. If a copy of the MPL was not distributed with this -;; file, You can obtain one at http://mozilla.org/MPL/2.0/. -;; -;; Copyright (c) KALEIDOS INC - -(ns app.main.ui.ds.controls.token-input - (:require-macros - [app.main.style :as stl]) - (:require - [app.common.data :as d] - [app.common.data.macros :as dm] - [app.main.constants :refer [max-input-length]] - [app.main.ui.ds.controls.shared.options-dropdown :refer [options-dropdown*]] - [app.main.ui.ds.controls.utilities.hint-message :refer [hint-message*]] - [app.main.ui.ds.controls.utilities.input-field :refer [input-field*]] - [app.main.ui.ds.controls.utilities.label :refer [label*]] - [app.util.dom :as dom] - [app.util.i18n :refer [tr]] - [app.util.object :as obj] - [cuerdas.core :as str] - [rumext.v2 :as mf] - [rumext.v2.util :as mfu])) - -;; TODO; duplucated code with numeric-input.cljs, consider refactoring -(defn- sort-groups-and-tokens - "Sorts both the groups and the tokens inside them alphabetically. - - Input: - A map where: - - keys are groups (keywords or strings, e.g. :dimensions, :colors) - - values are vectors of token maps, each containing at least a :name key - - Example input: - {:dimensions [{:name \"tres\"} {:name \"quini\"}] - :colors [{:name \"azul\"} {:name \"rojo\"}]} - - Output: - A sorted map where: - - groups are ordered alphabetically by key - - tokens inside each group are sorted alphabetically by :name - - Example output: - {:colors [{:name \"azul\"} {:name \"rojo\"}] - :dimensions [{:name \"quini\"} {:name \"tres\"}]}" - - [groups->tokens] - (into (sorted-map) ;; ensure groups are ordered alphabetically by their key - (for [[group tokens] groups->tokens] - [group (sort-by :name tokens)]))) - -(defn- extract-partial-brace-text - [s] - (when-let [start (str/last-index-of s "{")] - (subs s (inc start)))) -(defn- filter-token-groups-by-name - [tokens filter-text] - (let [lc-filter (str/lower filter-text)] - (into {} - (keep (fn [[group tokens]] - (let [filtered (filter #(str/includes? (str/lower (:name %)) lc-filter) tokens)] - (when (seq filtered) - [group filtered])))) - tokens))) - -(defn- token->dropdown-option - [token] - {:id (str (get token :id)) - :type :token - :resolved-value (get token :resolved-value) - :name (get token :name)}) - - -(defn- generate-dropdown-options - [tokens no-sets] - (if (empty? tokens) - [{:type :empty - :label (if no-sets - (tr "ds.inputs.numeric-input.no-applicable-tokens") - (tr "ds.inputs.numeric-input.no-matches"))}] - (->> tokens - (map (fn [[type items]] - (cons {:group true - :type :group - :id (dm/str "group-" (name type)) - :name (name type)} - (map token->dropdown-option items)))) - (interpose [{:separator true - :id "separator" - :type :separator}]) - (apply concat) - (vec) - (not-empty)))) - - - (mf/defc token-input* - [{:keys [label id hint-message is-optional hint-type type tokens empty-to-end] :rest props}] - (let [tokens (if (object? tokens) - (mfu/bean tokens) - tokens) - id (or id (mf/use-id)) - has-label (not (str/blank? label)) - type (d/nilv type "text") - has-hint (and (some? hint-message) (not (str/blank? hint-message))) - is-optional (d/nilv is-optional false) - is-open* (mf/use-state false) - is-open (deref is-open*) - filter-term* (mf/use-state "") - filter-term (deref filter-term*) - - dropdown-options - (mf/with-memo [tokens filter-term] - (delay - (let [tokens (if (delay? tokens) @tokens tokens) - - sorted-tokens (sort-groups-and-tokens tokens) - partial (extract-partial-brace-text filter-term) - options (if (seq partial) - (filter-token-groups-by-name sorted-tokens partial) - sorted-tokens) - no-sets? (nil? sorted-tokens)] - (generate-dropdown-options options no-sets?)))) - on-option-click - (mf/use-fn - (mf/deps) - (fn [event])) - focused-id* (mf/use-state nil) - focused-id (deref focused-id*) - selected-id* - (mf/use-state (fn [])) - empty-to-end (d/nilv empty-to-end false) - selected-id - (deref selected-id*) - listbox-id (mf/use-id) - nodes-ref (mf/use-ref nil) - set-option-ref - (mf/use-fn - (fn [node] - (let [state (mf/ref-val nodes-ref) - state (d/nilv state #js {}) - id (dom/get-data node "id") - state (obj/set! state id node)] - (mf/set-ref-val! nodes-ref state) - (fn [] - (let [state (mf/ref-val nodes-ref) - state (d/nilv state #js {}) - id (dom/get-data node "id") - state (obj/unset! state id)] - (mf/set-ref-val! nodes-ref state)))))) - props (mf/spread-props props {:type type - :id id - :has-hint has-hint - :hint-type hint-type})] - [:div {:class (stl/css-case :wrapper true)} - - (when has-label - [:> label* {:for id :is-optional is-optional} label]) - [:> input-field* props] - (when ^boolean is-open - (let [options (if (delay? dropdown-options) @dropdown-options dropdown-options)] - [:> options-dropdown* {:on-click on-option-click - :id listbox-id - :options options - :selected selected-id - :focused focused-id - :align :left - :empty-to-end empty-to-end - :ref set-option-ref}])) - (when has-hint - [:> hint-message* {:id id - :message hint-message - :type hint-type}])])) diff --git a/frontend/src/app/main/ui/ds/controls/token_input.mdx b/frontend/src/app/main/ui/ds/controls/token_input.mdx deleted file mode 100644 index ae6b20e996..0000000000 --- a/frontend/src/app/main/ui/ds/controls/token_input.mdx +++ /dev/null @@ -1,12 +0,0 @@ -{ /* This Source Code Form is subject to the terms of the Mozilla Public - License, v. 2.0. If a copy of the MPL was not distributed with this - file, You can obtain one at http://mozilla.org/MPL/2.0/. - - Copyright (c) KALEIDOS INC */ } - -import { Canvas, Meta } from '@storybook/blocks'; -import * as TokenInputStories from "./token-input.stories"; - - - -# Todo \ No newline at end of file diff --git a/frontend/src/app/main/ui/ds/controls/token_input.scss b/frontend/src/app/main/ui/ds/controls/token_input.scss deleted file mode 100644 index 812f857ee3..0000000000 --- a/frontend/src/app/main/ui/ds/controls/token_input.scss +++ /dev/null @@ -1,8 +0,0 @@ -// This Source Code Form is subject to the terms of the Mozilla Public -// License, v. 2.0. If a copy of the MPL was not distributed with this -// file, You can obtain one at http://mozilla.org/MPL/2.0/. -// -// Copyright (c) KALEIDOS INC -.wrapper { - background: red; -} \ No newline at end of file