/* * Copyright (C) 2023 Red Hat, Inc. * SPDX-License-Identifier: LGPL-2.1-or-later */ import cockpit from "cockpit"; import React from "react"; import client from "../client"; import { Button } from "@patternfly/react-core/dist/esm/components/Button/index.js"; import { CardBody } from "@patternfly/react-core/dist/esm/components/Card/index.js"; import { DescriptionList } from "@patternfly/react-core/dist/esm/components/DescriptionList/index.js"; import { StorageCard, StorageDescription, new_card, register_crossref } from "../pages.jsx"; import { std_format_action } from "../block/actions.jsx"; import { fmt_size } from "../utils.js"; import { std_lock_action } from "../crypto/actions.jsx"; const _ = cockpit.gettext; export function make_stratis_blockdev_card(next, backing_block, content_block) { const blockdev = client.blocks_stratis_blockdev[content_block.path]; const pool = blockdev && client.stratis_pools[blockdev.Pool]; const uuid = client.blocks_stratis_stopped_pool[content_block.path]; const blockdev_card = new_card({ title: _("Stratis block device"), location: { label: pool ? pool.Name : client.stratis_manager.StoppedPools[uuid]?.name?.v || uuid, to: ["pool", pool ? pool.Uuid : uuid], }, next, component: StratisBlockdevCard, props: { backing_block, content_block, pool, stopped_pool: uuid }, actions: [ std_lock_action(backing_block, content_block), std_format_action(backing_block, content_block), ] }); if (pool || uuid) { let extra; if (blockdev && blockdev.Tier === 0) extra = _("data"); else if (blockdev && blockdev.Tier === 1) extra = _("cache"); else extra = null; register_crossref({ key: pool || uuid, card: blockdev_card, actions: [], size: blockdev ? fmt_size(Number(blockdev.TotalPhysicalSize)) : fmt_size(content_block.Size), extra, }); } return blockdev_card; } export const StratisBlockdevCard = ({ card, backing_block, content_block, pool, stopped_pool }) => { const pool_name = pool ? pool.Name : stopped_pool; const pool_uuid = pool ? pool.Uuid : stopped_pool; return ( {(pool || stopped_pool) ? : "-" } ); };