Compare commits
5 Commits
cedf853301
...
b53e191528
Author | SHA1 | Date |
---|---|---|
Egor Savkin | b53e191528 | |
Egor Savkin | 52c05c2e2a | |
Egor Savkin | c7b0d5568c | |
Egor Savkin | 68677dce6e | |
Egor Savkin | b0ef9d07fc |
File diff suppressed because it is too large
Load Diff
49
package.json
49
package.json
|
@ -14,39 +14,42 @@
|
||||||
"type": "git",
|
"type": "git",
|
||||||
"url": "https://git.m-labs.hk/M-Labs/web2019.git"
|
"url": "https://git.m-labs.hk/M-Labs/web2019.git"
|
||||||
},
|
},
|
||||||
|
"dependencies": {
|
||||||
|
"@hello-pangea/dnd": "^16.6.0",
|
||||||
|
"bootstrap": "^5.3.3",
|
||||||
|
"json-logic-js": "^2.0.5",
|
||||||
|
"react": "^18.3.1",
|
||||||
|
"react-bootstrap": "^2.10.4",
|
||||||
|
"uuid": "^9.0.1",
|
||||||
|
"zustand": "^4.5.4"
|
||||||
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@babel/cli": "^7.23.9",
|
"@babel/cli": "^7.24.8",
|
||||||
"@babel/core": "^7.24.0",
|
"@babel/core": "^7.25.2",
|
||||||
"@babel/preset-env": "^7.24.0",
|
"@babel/preset-env": "^7.25.3",
|
||||||
"@babel/preset-react": "^7.23.3",
|
"@babel/preset-react": "^7.24.7",
|
||||||
|
"@uidotdev/usehooks": "^2.4.1",
|
||||||
"babel-loader": "^9.1.3",
|
"babel-loader": "^9.1.3",
|
||||||
"babel-preset-minify": "^0.5.2",
|
"babel-preset-minify": "^0.5.2",
|
||||||
"bootstrap": "^5.3.3",
|
"webpack": "^5.93.0",
|
||||||
"jquery": "^3.7.1",
|
|
||||||
"react": "^18.2.0",
|
|
||||||
"react-bootstrap": "^2.10.2",
|
|
||||||
"@hello-pangea/dnd": "^16.5.0",
|
|
||||||
"react-dom": "^18.2.0",
|
|
||||||
"uuid": "^9.0.1",
|
|
||||||
"webpack": "^5.90.3",
|
|
||||||
"webpack-cli": "^5.1.4",
|
"webpack-cli": "^5.1.4",
|
||||||
"json-logic-js": "^2.0.2",
|
|
||||||
"zustand": "^4.5.2",
|
|
||||||
"@uidotdev/usehooks":"^2.4.1",
|
|
||||||
"webpack-preprocessor-loader": "^1.3.0"
|
"webpack-preprocessor-loader": "^1.3.0"
|
||||||
},
|
},
|
||||||
"babel": {
|
"babel": {
|
||||||
"presets": [
|
"presets": [
|
||||||
"@babel/preset-react",
|
"@babel/preset-react",
|
||||||
["@babel/preset-env", {
|
[
|
||||||
"targets": {
|
"@babel/preset-env",
|
||||||
"browsers": [
|
{
|
||||||
">0.25%",
|
"targets": {
|
||||||
"not dead",
|
"browsers": [
|
||||||
"not op_mini all"
|
">0.25%",
|
||||||
]
|
"not dead",
|
||||||
|
"not op_mini all"
|
||||||
|
]
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}]
|
]
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
File diff suppressed because one or more lines are too long
|
@ -6,9 +6,33 @@ import {useShopStore} from "./shop_store";
|
||||||
// #!render_count
|
// #!render_count
|
||||||
import {useRenderCount} from "@uidotdev/usehooks";
|
import {useRenderCount} from "@uidotdev/usehooks";
|
||||||
|
|
||||||
|
|
||||||
|
function DatasheetLink({datasheet_file, datasheet_name}) {
|
||||||
|
return datasheet_file && datasheet_name && (<div className="ds">
|
||||||
|
<span className='doc-icon'></span>
|
||||||
|
<a href={datasheet_file} target="_blank" rel="noopener noreferrer">
|
||||||
|
{datasheet_name}
|
||||||
|
</a>
|
||||||
|
</div>)
|
||||||
|
}
|
||||||
|
|
||||||
|
function CardSpecs({specs}) {
|
||||||
|
return specs && specs.length > 0 && (<ul>
|
||||||
|
{specs.map((spec, index) =>
|
||||||
|
<li key={index}>{spec}</li>
|
||||||
|
)}
|
||||||
|
</ul>)
|
||||||
|
}
|
||||||
|
|
||||||
|
function AddButton({onAdd}) {
|
||||||
|
return <button onClick={onAdd}>
|
||||||
|
<img src="/images/shop/icon-add.svg" alt="add"/>
|
||||||
|
</button>
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Component that renders a product.
|
* Component that renders a product.
|
||||||
* Used in the aside (e.g catalog of product)
|
* Used in the aside (e.g catalog of products)
|
||||||
*/
|
*/
|
||||||
export function ProductItem({card_index}) {
|
export function ProductItem({card_index}) {
|
||||||
// #!render_count
|
// #!render_count
|
||||||
|
@ -16,33 +40,14 @@ export function ProductItem({card_index}) {
|
||||||
|
|
||||||
const getCardDescription = useShopStore((state) => state.getCardDescription);
|
const getCardDescription = useShopStore((state) => state.getCardDescription);
|
||||||
const currency = useShopStore((state) => state.currency);
|
const currency = useShopStore((state) => state.currency);
|
||||||
const onAddCard = useShopStore((state) => state.addCardFromCatalog);
|
const addCardFromCatalog = useShopStore((state) => state.addCardFromCatalog);
|
||||||
const card = getCardDescription(card_index);
|
const card = getCardDescription(card_index);
|
||||||
|
|
||||||
// #!render_count
|
// #!render_count
|
||||||
console.log("ProductItem renders: ", renderCount)
|
console.log("ProductItem renders: ", renderCount)
|
||||||
|
|
||||||
|
|
||||||
const render_specs = (card.specs && card.specs.length > 0 && (
|
|
||||||
<ul>
|
|
||||||
{card.specs.map((spec, index) =>
|
|
||||||
<li key={index}>{spec}</li>
|
|
||||||
)}
|
|
||||||
</ul>
|
|
||||||
));
|
|
||||||
|
|
||||||
const render_datasheet_link = (card.datasheet_file && card.datasheet_name && (
|
|
||||||
<div className="ds">
|
|
||||||
<span className='doc-icon'></span>
|
|
||||||
<a href={card.datasheet_file} target="_blank" rel="noopener noreferrer">
|
|
||||||
{card.datasheet_name}
|
|
||||||
</a>
|
|
||||||
</div>
|
|
||||||
));
|
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<section className="productItem">
|
<section className="productItem">
|
||||||
|
|
||||||
<div className="content">
|
<div className="content">
|
||||||
<h3 style={{'marginBottom': card.name_codename ? '5px' : '20px'}}>{card.name_number} {card.name}</h3>
|
<h3 style={{'marginBottom': card.name_codename ? '5px' : '20px'}}>{card.name_number} {card.name}</h3>
|
||||||
{card.name_codename ? (
|
{card.name_codename ? (
|
||||||
|
@ -51,16 +56,13 @@ export function ProductItem({card_index}) {
|
||||||
|
|
||||||
<div className="price">{`${currency} ${formatMoney(card.price)}`}</div>
|
<div className="price">{`${currency} ${formatMoney(card.price)}`}</div>
|
||||||
|
|
||||||
{render_specs}
|
<CardSpecs specs={card.specs}/>
|
||||||
|
|
||||||
{render_datasheet_link}
|
<DatasheetLink datasheet_file={card.datasheet_file} datasheet_name={card.datasheet_name}/>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div className="content">
|
<div className="content">
|
||||||
|
<AddButton onAdd={() => addCardFromCatalog(null, card_index, null)} />
|
||||||
<button onClick={() => onAddCard(null, card_index, null)}>
|
|
||||||
<img src="/images/shop/icon-add.svg" alt="add"/>
|
|
||||||
</button>
|
|
||||||
|
|
||||||
<Draggable draggableId={card.id + card_index} index={card_index}>
|
<Draggable draggableId={card.id + card_index} index={card_index}>
|
||||||
{(provided, snapshot) => (
|
{(provided, snapshot) => (
|
||||||
|
@ -83,10 +85,7 @@ export function ProductItem({card_index}) {
|
||||||
</React.Fragment>
|
</React.Fragment>
|
||||||
)}
|
)}
|
||||||
</Draggable>
|
</Draggable>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
</section>
|
</section>
|
||||||
);
|
);
|
||||||
|
|
||||||
}
|
}
|
|
@ -12,7 +12,7 @@ export function DialogPopup({options, data, target, id, big, first, last, option
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
|
|
||||||
let div_classes = `overlayVariant border rounded ${big ? "overlay-bigcard" : "overlay-smallcard"} ${(!big && first) ? "overlay-first" : ""} ${(!big && last) ? "overlay-last" : ""} ${options_class || ""}`;
|
let div_classes = `overlayVariant border rounded ${big ? "overlay-bigcard" : "overlay-smallcard"} ${(!big && first) ? "overlay-first" : ""} ${(!big && last && !first) ? "overlay-last" : ""} ${options_class || ""}`;
|
||||||
const handleClick = (_event) => {
|
const handleClick = (_event) => {
|
||||||
setShow(!show);
|
setShow(!show);
|
||||||
};
|
};
|
||||||
|
|
|
@ -39,9 +39,10 @@ class Line extends Component {
|
||||||
<div className="shop-line" key={this.props.id}>
|
<div className="shop-line" key={this.props.id}>
|
||||||
<label htmlFor={key} className="form-label">
|
<label htmlFor={key} className="form-label">
|
||||||
{this.props.icon && <img src={`/images${this.props.icon}`} className="options-icon"/>}
|
{this.props.icon && <img src={`/images${this.props.icon}`} className="options-icon"/>}
|
||||||
{this.props.title}:
|
{this.props.title}
|
||||||
|
{this.props.tip && <Tip id={this.props.id + "tooltip"} tip={this.props.tip}/>}
|
||||||
|
:
|
||||||
</label>
|
</label>
|
||||||
{this.props.tip && <Tip id={this.props.id + "tooltip"} tip={this.props.tip}/>}
|
|
||||||
<input type="text" className={`form-control form-control-sm ${this.state.valid ? "" : "options-invalid"}`} id={key} onChange={this.handleChange}
|
<input type="text" className={`form-control form-control-sm ${this.state.valid ? "" : "options-invalid"}`} id={key} onChange={this.handleChange}
|
||||||
value={this.state.text}/>
|
value={this.state.text}/>
|
||||||
</div>
|
</div>
|
||||||
|
|
|
@ -49,8 +49,8 @@ class Switch extends Component {
|
||||||
<label className="form-check-label" htmlFor={key} style={{"display": "inline"}}>
|
<label className="form-check-label" htmlFor={key} style={{"display": "inline"}}>
|
||||||
{this.props.icon && <img src={`/images${this.props.icon}`} className="options-icon"/>}
|
{this.props.icon && <img src={`/images${this.props.icon}`} className="options-icon"/>}
|
||||||
{this.props.title}
|
{this.props.title}
|
||||||
|
{this.props.tip && <Tip id={this.props.id + "tooltip"} tip={this.props.tip}/>}
|
||||||
</label>
|
</label>
|
||||||
{this.props.tip && <Tip id={this.props.id + "tooltip"} tip={this.props.tip}/>}
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
);
|
);
|
||||||
|
|
|
@ -65,8 +65,8 @@ class SwitchLine extends Component {
|
||||||
<label className="form-check-label" htmlFor={key + "switch"}>
|
<label className="form-check-label" htmlFor={key + "switch"}>
|
||||||
{this.props.icon && <img src={`/images${this.props.icon}`} className="options-icon"/>}
|
{this.props.icon && <img src={`/images${this.props.icon}`} className="options-icon"/>}
|
||||||
{this.props.title}
|
{this.props.title}
|
||||||
|
{this.props.tip && <Tip id={this.props.id + "tooltip"} tip={this.props.tip}/>}
|
||||||
</label>
|
</label>
|
||||||
{this.props.tip && <Tip id={this.props.id + "tooltip"} tip={this.props.tip}/>}
|
|
||||||
</div>
|
</div>
|
||||||
<input type="text" className={`form-control form-control-sm ${this.state.valid ? "" : "options-invalid"}`} id={key + "line"} onChange={this.handleText}
|
<input type="text" className={`form-control form-control-sm ${this.state.valid ? "" : "options-invalid"}`} id={key + "line"} onChange={this.handleText}
|
||||||
value={this.state.text} disabled={!this.state.checked}/>
|
value={this.state.text} disabled={!this.state.checked}/>
|
||||||
|
|
|
@ -179,7 +179,6 @@ const shop_data = {
|
||||||
'Price includes bitstream generation, flashing, testing, and firmware updates for 1 year (USD 1,400.00).',
|
'Price includes bitstream generation, flashing, testing, and firmware updates for 1 year (USD 1,400.00).',
|
||||||
],
|
],
|
||||||
size: 'big',
|
size: 'big',
|
||||||
type: 'kasli',
|
|
||||||
options: [
|
options: [
|
||||||
{type: "Radio", args: {title: "DRTIO role", outvar: "drtio_role", variants: ["standalone", "master", "satellite"], tip: "Distributed Real Time Input/Output allows ARTIQ RTIO channels to be distributed among several satellite devices synchronized and controlled by a central core(master) device. Standalone option disables this feature."}},
|
{type: "Radio", args: {title: "DRTIO role", outvar: "drtio_role", variants: ["standalone", "master", "satellite"], tip: "Distributed Real Time Input/Output allows ARTIQ RTIO channels to be distributed among several satellite devices synchronized and controlled by a central core(master) device. Standalone option disables this feature."}},
|
||||||
{
|
{
|
||||||
|
@ -244,7 +243,6 @@ const shop_data = {
|
||||||
'4 MMCX clock outputs.',
|
'4 MMCX clock outputs.',
|
||||||
],
|
],
|
||||||
size: 'big',
|
size: 'big',
|
||||||
type: 'kasli',
|
|
||||||
hp: 8,
|
hp: 8,
|
||||||
nbrSlotMin: 0,
|
nbrSlotMin: 0,
|
||||||
nbrSlotMax: 12,
|
nbrSlotMax: 12,
|
||||||
|
@ -316,7 +314,6 @@ const shop_data = {
|
||||||
'A pair of VHDCI carriers is a simple, low-latency and low-cost alternative to DRTIO for some applications.',
|
'A pair of VHDCI carriers is a simple, low-latency and low-cost alternative to DRTIO for some applications.',
|
||||||
],
|
],
|
||||||
size: 'big',
|
size: 'big',
|
||||||
type: 'vhdcicarrier',
|
|
||||||
resources: [
|
resources: [
|
||||||
{name: "eem", max: 8},
|
{name: "eem", max: 8},
|
||||||
],
|
],
|
||||||
|
@ -347,7 +344,6 @@ const shop_data = {
|
||||||
datasheet_file: '/docs/sinara-datasheets/2118-2128.pdf',
|
datasheet_file: '/docs/sinara-datasheets/2118-2128.pdf',
|
||||||
datasheet_name: '2118/2128 BNC/SMA-TTL datasheet',
|
datasheet_name: '2118/2128 BNC/SMA-TTL datasheet',
|
||||||
size: 'big',
|
size: 'big',
|
||||||
type: null,
|
|
||||||
options: [
|
options: [
|
||||||
{
|
{
|
||||||
"if": [
|
"if": [
|
||||||
|
@ -457,7 +453,6 @@ const shop_data = {
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
size: 'small',
|
size: 'small',
|
||||||
type: null,
|
|
||||||
warnings: [
|
warnings: [
|
||||||
"no_eem_source"
|
"no_eem_source"
|
||||||
],
|
],
|
||||||
|
@ -549,7 +544,6 @@ const shop_data = {
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
size: 'small',
|
size: 'small',
|
||||||
type: null,
|
|
||||||
warnings: [
|
warnings: [
|
||||||
"no_eem_source"
|
"no_eem_source"
|
||||||
],
|
],
|
||||||
|
@ -636,7 +630,6 @@ const shop_data = {
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
size: 'small',
|
size: 'small',
|
||||||
type: null,
|
|
||||||
warnings: [
|
warnings: [
|
||||||
"no_eem_source"
|
"no_eem_source"
|
||||||
],
|
],
|
||||||
|
@ -700,7 +693,6 @@ const shop_data = {
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
size: 'small',
|
size: 'small',
|
||||||
type: 'urukul',
|
|
||||||
warnings: [
|
warnings: [
|
||||||
"no_eem_source",
|
"no_eem_source",
|
||||||
"no_clk_source"
|
"no_clk_source"
|
||||||
|
@ -739,7 +731,6 @@ const shop_data = {
|
||||||
fallback: {text: "125 MHz", checked: false}}}
|
fallback: {text: "125 MHz", checked: false}}}
|
||||||
],
|
],
|
||||||
size: 'small',
|
size: 'small',
|
||||||
type: 'urukul',
|
|
||||||
warnings: [
|
warnings: [
|
||||||
"no_eem_source",
|
"no_eem_source",
|
||||||
"no_clk_source"
|
"no_clk_source"
|
||||||
|
@ -773,7 +764,6 @@ const shop_data = {
|
||||||
{type: "Radio", args: {title: "Variant", outvar: "variant", variants: ["Baseband", "Upconverter"], fallback: 1}},
|
{type: "Radio", args: {title: "Variant", outvar: "variant", variants: ["Baseband", "Upconverter"], fallback: 1}},
|
||||||
],
|
],
|
||||||
size: 'small',
|
size: 'small',
|
||||||
type: 'urukul',
|
|
||||||
warnings: [
|
warnings: [
|
||||||
"no_eem_source",
|
"no_eem_source",
|
||||||
"no_clk_source"
|
"no_clk_source"
|
||||||
|
@ -816,7 +806,6 @@ const shop_data = {
|
||||||
datasheet_file: '/docs/sinara-datasheets/5432.pdf',
|
datasheet_file: '/docs/sinara-datasheets/5432.pdf',
|
||||||
datasheet_name: '5432 Zotino datasheet',
|
datasheet_name: '5432 Zotino datasheet',
|
||||||
size: 'small',
|
size: 'small',
|
||||||
type: 'zotino',
|
|
||||||
warnings: [
|
warnings: [
|
||||||
"no_eem_source",
|
"no_eem_source",
|
||||||
"idc_resource"
|
"idc_resource"
|
||||||
|
@ -846,7 +835,6 @@ const shop_data = {
|
||||||
'Channels can also be broken out to BNC or SMA using IDC-BNC, IDC-SMA or IDC-MCX cards.'
|
'Channels can also be broken out to BNC or SMA using IDC-BNC, IDC-SMA or IDC-MCX cards.'
|
||||||
],
|
],
|
||||||
size: 'small',
|
size: 'small',
|
||||||
type: 'zotino',
|
|
||||||
warnings: [
|
warnings: [
|
||||||
"no_eem_source",
|
"no_eem_source",
|
||||||
"idc_resource",
|
"idc_resource",
|
||||||
|
@ -872,7 +860,6 @@ const shop_data = {
|
||||||
'Breaking out all 32 channels from a Zotino requires 4 IDC-BNC cards.'
|
'Breaking out all 32 channels from a Zotino requires 4 IDC-BNC cards.'
|
||||||
],
|
],
|
||||||
size: 'big',
|
size: 'big',
|
||||||
type: 'idc-bnc',
|
|
||||||
warnings: [
|
warnings: [
|
||||||
"no_idc_source"
|
"no_idc_source"
|
||||||
],
|
],
|
||||||
|
@ -931,7 +918,6 @@ const shop_data = {
|
||||||
'Breaking out all 32 channels from a Zotino requires 4 SMA-IDC cards.'
|
'Breaking out all 32 channels from a Zotino requires 4 SMA-IDC cards.'
|
||||||
],
|
],
|
||||||
size: 'small',
|
size: 'small',
|
||||||
type: 'idc-bnc',
|
|
||||||
warnings: [
|
warnings: [
|
||||||
"no_idc_source"
|
"no_idc_source"
|
||||||
],
|
],
|
||||||
|
@ -951,7 +937,6 @@ const shop_data = {
|
||||||
'Connects an external HD68 cable to IDC-BNC, IDC-SMA or IDC-MCX cards.',
|
'Connects an external HD68 cable to IDC-BNC, IDC-SMA or IDC-MCX cards.',
|
||||||
],
|
],
|
||||||
size: 'small',
|
size: 'small',
|
||||||
type: 'hd68',
|
|
||||||
options: [
|
options: [
|
||||||
{type: "Radio", args: {title: "Cable length", outvar: "hd68_cable_len", variants: ["1 M", "2 M", "3 M"], tip: "The desired length of the HD68 cable", fallback: 1}},
|
{type: "Radio", args: {title: "Cable length", outvar: "hd68_cable_len", variants: ["1 M", "2 M", "3 M"], tip: "The desired length of the HD68 cable", fallback: 1}},
|
||||||
],
|
],
|
||||||
|
@ -1008,7 +993,6 @@ const shop_data = {
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
size: 'big',
|
size: 'big',
|
||||||
type: 'novo',
|
|
||||||
warnings: [
|
warnings: [
|
||||||
"no_eem_source"
|
"no_eem_source"
|
||||||
],
|
],
|
||||||
|
@ -1035,7 +1019,6 @@ const shop_data = {
|
||||||
{type: "Radio", args: {title: "Connectors", outvar: "n_eem", variants: ["1 EEM", "2 EEM", "3 EEM"], tip: "Number of EEM ports to use.", fallback: 1}},
|
{type: "Radio", args: {title: "Connectors", outvar: "n_eem", variants: ["1 EEM", "2 EEM", "3 EEM"], tip: "Number of EEM ports to use.", fallback: 1}},
|
||||||
],
|
],
|
||||||
size: 'small',
|
size: 'small',
|
||||||
type: 'koster',
|
|
||||||
warnings: [
|
warnings: [
|
||||||
"no_eem_source"
|
"no_eem_source"
|
||||||
],
|
],
|
||||||
|
@ -1064,7 +1047,6 @@ const shop_data = {
|
||||||
],
|
],
|
||||||
options_class: "clocker",
|
options_class: "clocker",
|
||||||
size: 'small',
|
size: 'small',
|
||||||
type: 'clocker',
|
|
||||||
warnings: [
|
warnings: [
|
||||||
"no_eem_source",
|
"no_eem_source",
|
||||||
"no_clk_source",
|
"no_clk_source",
|
||||||
|
@ -1105,7 +1087,6 @@ const shop_data = {
|
||||||
],
|
],
|
||||||
options_class: "stabilizer",
|
options_class: "stabilizer",
|
||||||
size: 'small',
|
size: 'small',
|
||||||
type: null,
|
|
||||||
warnings: [
|
warnings: [
|
||||||
"no_eem_source"
|
"no_eem_source"
|
||||||
],
|
],
|
||||||
|
@ -1140,7 +1121,6 @@ const shop_data = {
|
||||||
],
|
],
|
||||||
options_class: "stabilizer",
|
options_class: "stabilizer",
|
||||||
size: 'small',
|
size: 'small',
|
||||||
type: null,
|
|
||||||
warnings: [
|
warnings: [
|
||||||
"no_eem_source"
|
"no_eem_source"
|
||||||
],
|
],
|
||||||
|
@ -1170,7 +1150,6 @@ const shop_data = {
|
||||||
fallback: {text: "125 MHz", checked: false}}}
|
fallback: {text: "125 MHz", checked: false}}}
|
||||||
],
|
],
|
||||||
size: 'small',
|
size: 'small',
|
||||||
type: null,
|
|
||||||
warnings: [
|
warnings: [
|
||||||
"no_eem_source",
|
"no_eem_source",
|
||||||
"no_clk_source"
|
"no_clk_source"
|
||||||
|
@ -1199,7 +1178,6 @@ const shop_data = {
|
||||||
fallback: {text: "125 MHz", checked: false}}}
|
fallback: {text: "125 MHz", checked: false}}}
|
||||||
],
|
],
|
||||||
size: 'big',
|
size: 'big',
|
||||||
type: null,
|
|
||||||
warnings: [
|
warnings: [
|
||||||
"no_eem_source",
|
"no_eem_source",
|
||||||
"no_clk_source"
|
"no_clk_source"
|
||||||
|
@ -1229,7 +1207,6 @@ const shop_data = {
|
||||||
{type: "Switch", args: {title: "Ext power", outvar: "ext_pwr", "tip": "Use external power supply in order to reduce number of used EEM connectors"}}
|
{type: "Switch", args: {title: "Ext power", outvar: "ext_pwr", "tip": "Use external power supply in order to reduce number of used EEM connectors"}}
|
||||||
],
|
],
|
||||||
size: 'small',
|
size: 'small',
|
||||||
type: null,
|
|
||||||
warnings: [
|
warnings: [
|
||||||
"no_eem_source"
|
"no_eem_source"
|
||||||
],
|
],
|
||||||
|
@ -1253,7 +1230,6 @@ const shop_data = {
|
||||||
'Can stabilize temperature of Sinara 5432 DAC or external devices containing TEC and thermistor.'
|
'Can stabilize temperature of Sinara 5432 DAC or external devices containing TEC and thermistor.'
|
||||||
],
|
],
|
||||||
size: 'small',
|
size: 'small',
|
||||||
type: null,
|
|
||||||
consumes: {
|
consumes: {
|
||||||
hp: 4
|
hp: 4
|
||||||
},
|
},
|
||||||
|
@ -1277,7 +1253,6 @@ const shop_data = {
|
||||||
'Included remote analog front-end (AFE) board converts differential signals to ±10V single-ended at the point of use, with additional gain and filtering.',
|
'Included remote analog front-end (AFE) board converts differential signals to ±10V single-ended at the point of use, with additional gain and filtering.',
|
||||||
],
|
],
|
||||||
size: 'big',
|
size: 'big',
|
||||||
type: null,
|
|
||||||
warnings: [
|
warnings: [
|
||||||
"no_eem_source",
|
"no_eem_source",
|
||||||
"no_clk_source"
|
"no_clk_source"
|
||||||
|
@ -1312,7 +1287,6 @@ const shop_data = {
|
||||||
{type: "Switch", args: {title: "Termination #1", outvar: "term_1", tip: "Enable termination on ADC channel #1"}}
|
{type: "Switch", args: {title: "Termination #1", outvar: "term_1", tip: "Enable termination on ADC channel #1"}}
|
||||||
],
|
],
|
||||||
size: 'big',
|
size: 'big',
|
||||||
type: null,
|
|
||||||
warnings: [
|
warnings: [
|
||||||
"no_eem_source",
|
"no_eem_source",
|
||||||
"no_clk_source"
|
"no_clk_source"
|
||||||
|
@ -1342,7 +1316,6 @@ const shop_data = {
|
||||||
"Optional - external power brick will be shipped free of charge if removed."
|
"Optional - external power brick will be shipped free of charge if removed."
|
||||||
],
|
],
|
||||||
size: 'big',
|
size: 'big',
|
||||||
type: null,
|
|
||||||
warnings: [],
|
warnings: [],
|
||||||
consumes: {
|
consumes: {
|
||||||
hp: 4,
|
hp: 4,
|
||||||
|
|
Loading…
Reference in New Issue