From f67aa7fc51db1bde25d428d9edb9baddd17c7025 Mon Sep 17 00:00:00 2001 From: Egor Savkin Date: Fri, 8 Sep 2023 18:27:23 +0800 Subject: [PATCH] Add external data for use per every card. Apply it for TTL and Suservo Signed-off-by: esavkin --- static/js/shop.jsx | 9 ++++-- static/js/shop_components.jsx | 16 +++++++++-- static/js/shop_data.js | 52 +++++++++++++++++++++++++++++++---- 3 files changed, 67 insertions(+), 10 deletions(-) diff --git a/static/js/shop.jsx b/static/js/shop.jsx index 72e9901..12adf3f 100644 --- a/static/js/shop.jsx +++ b/static/js/shop.jsx @@ -6,7 +6,7 @@ import { createRoot } from "react-dom/client"; import PropTypes from "prop-types"; import { DragDropContext, Droppable, Draggable } from "react-beautiful-dnd"; import { v4 as uuidv4 } from 'uuid'; -import { OptionsDialogPopup, OptionsSummaryPopup } from "./shop_components.jsx";import { OverlayTrigger } from "react-bootstrap"; +import { OptionsDialogPopup, OptionsSummaryPopup, fill_ext_data } from "./shop_components.jsx";import { OverlayTrigger } from "react-bootstrap"; const data = window.shop_data; const itemsUnfoldedList = Array.from(data.columns.backlog.categories.map(groupId => groupId.itemIds).flat()); @@ -538,6 +538,7 @@ class ProductCartItem extends React.PureComponent { index: PropTypes.number.isRequired, model: PropTypes.object.isRequired, data: PropTypes.object, + ext_data: PropTypes.object, onToggleOverlayRemove: PropTypes.func, onClickRemoveItem: PropTypes.func, onClickItem: PropTypes.func, @@ -591,6 +592,7 @@ class ProductCartItem extends React.PureComponent { model, data, index, + ext_data, } = this.props; let warning, options, options_data; @@ -608,6 +610,7 @@ class ProductCartItem extends React.PureComponent { options = data.options; if (!data.options_data) data.options_data = {}; options_data = data.options_data; + options_data.ext_data = ext_data; } let render_progress; @@ -702,7 +705,7 @@ class ProductCartItem extends React.PureComponent { data={options_data} key={"popover" + index} id={"popover" + index} - big={data.size == "big"} + big={data.size === "big"} target={{ construct: ((outvar, value) => { //console.log("construct", outvar, value, options_data); @@ -867,6 +870,7 @@ class Cart extends React.PureComponent { const products = data.items.map((item, index) => { let itemData; + let ext_data = fill_ext_data(data.itemsData, index); if (data.itemsData && index in data.itemsData) { itemData = data.itemsData[index]; } @@ -880,6 +884,7 @@ class Cart extends React.PureComponent { id={item.id} index={index} data={itemData} + ext_data={ext_data} onToggleOverlayRemove={onToggleOverlayRemove} onClickRemoveItem={onClickRemoveItem} onClickItem={onClickItem} diff --git a/static/js/shop_components.jsx b/static/js/shop_components.jsx index 3af8e87..c0d1224 100644 --- a/static/js/shop_components.jsx +++ b/static/js/shop_components.jsx @@ -436,12 +436,22 @@ export function OptionsSummaryPopup({id, data}) { className="overlayVariant card border rounded" id={id}>
- {Array.from(Object.entries(data).map(([key, value], _) => { - return (

{key}: {stringify(value)}

); - }))} + {Array.from(Object.entries(data) + .filter(([key, value], _) => key !== "ext_data") + .map(([key, value], _) => { + return (

{key}: {stringify(value)}

); + }))}
); } +export function fill_ext_data(data, index) { + return { + has_other_dio: data.filter((value, item_index) => index !== item_index && value.name.endsWith("-TTL")).length > 0, + has_dds: data.filter(((value, _) => value.name === "DDS" )).length > 0, + has_sampler: data.filter(((value, _) => value.name === "Sampler" )).length > 0 + } +} + diff --git a/static/js/shop_data.js b/static/js/shop_data.js index 505327c..0e4c44e 100644 --- a/static/js/shop_data.js +++ b/static/js/shop_data.js @@ -287,7 +287,17 @@ const shop_data = { slotOccupied: 1, clockOccupied: 0, options: [ - {type: "Switch", args: {title: "Output first group", outvar: "out_first_group", tip: "Switch connectors 0-3 to output"}}, + { + "if": [ + {"var": "ext_data.has_other_dio"}, + [ + {type: "Switch", args: {title: "Output first group", fallback: true, outvar: "out_first_group", tip: "Switch connectors 0-3 to output"}} + ], + [ + {type: "Switch", args: {title: "Output first group", outvar: "out_first_group", tip: "Switch connectors 0-3 to output"}} + ] + ] + }, {type: "Switch", args: {title: "Output second group", outvar: "out_second_group", fallback: true, tip: "Switch connectors 4-7 to output"}} ], rules: { @@ -312,7 +322,17 @@ const shop_data = { datasheet_file: '/docs/sinara-datasheets/2118-2128.pdf', datasheet_name: '2118/2128 BNC/SMA-TTL datasheet', options: [ - {type: "Switch", args: {title: "Output first group", outvar: "out_first_group", tip: "Switch connectors 0-3 to output"}}, + { + "if": [ + {"var": "ext_data.has_other_dio"}, + [ + {type: "Switch", args: {title: "Output first group", fallback: true, outvar: "out_first_group", tip: "Switch connectors 0-3 to output"}} + ], + [ + {type: "Switch", args: {title: "Output first group", outvar: "out_first_group", tip: "Switch connectors 0-3 to output"}} + ] + ] + }, {type: "Switch", args: {title: "Output second group", outvar: "out_second_group", fallback: true, tip: "Switch connectors 4-7 to output"}} ], size: 'small', @@ -349,7 +369,17 @@ const shop_data = { datasheet_file: '/docs/sinara-datasheets/2238.pdf', datasheet_name: '2238 MCX-TTL datasheet', options: [ - {type: "Switch", args: {title: "Output first group", outvar: "out_first_group", tip: "Switch connectors 0-3 to output"}}, + { + "if": [ + {"var": "ext_data.has_other_dio"}, + [ + {type: "Switch", args: {title: "Output first group", fallback: true, outvar: "out_first_group", tip: "Switch connectors 0-3 to output"}} + ], + [ + {type: "Switch", args: {title: "Output first group", outvar: "out_first_group", tip: "Switch connectors 0-3 to output"}} + ] + ] + }, {type: "Switch", args: {title: "Output second group", outvar: "out_second_group", fallback: true, tip: "Switch connectors 4-7 to output"}}, {type: "Switch", args: {title: "Output third group", outvar: "out_third_group", fallback: true, tip: "Switch connectors 8-11 to output"}}, {type: "Switch", args: {title: "Output fourth group", outvar: "out_fourth_group", fallback: true, tip: "Switch connectors 12-15 to output"}} @@ -440,7 +470,13 @@ const shop_data = { null, [ {type: "SwitchLine", args: {title: "Ext CLK", outvar: "ext_clk", fallback: {text: "125 MHz", checked: false}}}, - {type: "Switch", args: {title: "SUServo mode", outvar: "suservo", }} + { + "if": [ + {"var": "ext_data.has_sampler"}, + {type: "Switch", args: {title: "SUServo mode", outvar: "suservo"}}, + null + ] + } ] ] } @@ -750,7 +786,13 @@ const shop_data = { 'Supports SU-Servo laser intensity stabilization servo in conjunction with Urukul.' ], options: [ - {type: "Switch", args: {title: "SUServo mode", outvar: "suservo"}} + { + "if": [ + {"var": "ext_data.has_dds"}, + {type: "Switch", args: {title: "SUServo mode", outvar: "suservo"}}, + null + ] + } ], size: 'big', type: 'novo',