From 25c59517835089eca2a825e2df583b1d211c7df0 Mon Sep 17 00:00:00 2001 From: Marius Vollmer Date: Thu, 9 Nov 2023 12:23:06 +0200 Subject: [PATCH] WIP - absolutely everything is a container! --- pkg/storaged/pages.jsx | 10 +- pkg/storaged/pages/other.jsx | 57 ++++----- pkg/storaged/pages/stratis-pool.jsx | 175 +++++++++++++++------------- 3 files changed, 119 insertions(+), 123 deletions(-) diff --git a/pkg/storaged/pages.jsx b/pkg/storaged/pages.jsx index 8f13b3681e3e..f0b798b7e988 100644 --- a/pkg/storaged/pages.jsx +++ b/pkg/storaged/pages.jsx @@ -453,21 +453,21 @@ export const PageContainerStackItems = ({ page }) => { const items = []; let cont = page.container; while (cont) { - items.push(<> + items.push( - + - ); + ); cont = cont.parent; } if (page.parent && page.parent.parent) { - items.push(<> + items.push( @@ -482,7 +482,7 @@ export const PageContainerStackItems = ({ page }) => { - ); + ); } return items; diff --git a/pkg/storaged/pages/other.jsx b/pkg/storaged/pages/other.jsx index 177b85441b78..eba2cca4da09 100644 --- a/pkg/storaged/pages/other.jsx +++ b/pkg/storaged/pages/other.jsx @@ -19,59 +19,42 @@ import cockpit from "cockpit"; import React from "react"; -import client from "../client"; import { DescriptionList } from "@patternfly/react-core/dist/esm/components/DescriptionList/index.js"; import { CardBody } from "@patternfly/react-core/dist/esm/components/Card/index.js"; -import { Stack, StackItem } from "@patternfly/react-core/dist/esm/layouts/Stack/index.js"; import { SCard } from "../utils/card.jsx"; import { SDesc } from "../utils/desc.jsx"; -import { PageChildrenCard, ActionButtons, new_page, page_type, block_location } from "../pages.jsx"; +import { ActionButtons, new_container, block_location } from "../pages.jsx"; import { block_name } from "../utils.js"; -import { partitionable_block_actions, make_partitionable_block_pages } from "./drive.jsx"; -import { StorageSize } from "../storage-controls.jsx"; +import { partitionable_block_actions } from "./drive.jsx"; + +import { make_block_page } from "../create-pages.jsx"; const _ = cockpit.gettext; export function make_other_page(parent, block) { - const p = new_page({ - location: ["other", block_location(block)], - parent, - name: block_location(block), - columns: [ - _("Block device"), - block_name(block), - , - ], + const container = new_container({ + parent: null, + page_location: ["other", block_location(block)], + component: OtherContainer, + props: { block }, actions: partitionable_block_actions(block), - component: OtherPage, - props: { block } }); - make_partitionable_block_pages(p, block); + make_block_page(parent, block, container); } -const OtherPage = ({ page, block }) => { +const OtherContainer = ({ container, block }) => { return ( - - - - - - - - - - - - - } - emptyCaption={_("Block device is not formatted")} - page={page} /> - - + }> + + + + + + + ); }; diff --git a/pkg/storaged/pages/stratis-pool.jsx b/pkg/storaged/pages/stratis-pool.jsx index bb1307dae104..47bb8edaf281 100644 --- a/pkg/storaged/pages/stratis-pool.jsx +++ b/pkg/storaged/pages/stratis-pool.jsx @@ -376,7 +376,19 @@ export function make_stratis_pool_page(parent, pool) { { title: _("Add block devices"), action: () => add_disks(pool), - tag: "blockdevs", + }, + ], + }); + + const pool_container = new_container({ + parent: blockdevs_container, + component: StratisPoolContainer, + props: { pool, degraded_ops, can_grow, managed_fsys_sizes, stats }, + actions: [ + { + title: _("Delete pool"), + action: () => delete_pool(pool), + danger: true, }, ], }); @@ -384,11 +396,11 @@ export function make_stratis_pool_page(parent, pool) { const p = new_page({ location: ["pool", pool.Uuid], parent, - container: blockdevs_container, + container: pool_container, name: pool.Name, columns: [ - pool.Encrypted ? _("Encrypted Stratis filesystems pool") : _("Stratis filesystems pool"), - "/dev/stratis/" + pool.Name + "/", + pool.Encrypted ? _("Encrypted Stratis filesystems") : _("Stratis filesystems"), + null, , ], has_warning: degraded_ops || can_grow, @@ -401,13 +413,6 @@ export function make_stratis_pool_page(parent, pool) { excuse: (managed_fsys_sizes && stats.pool_free < fsys_min_size ? _("Not enough space for new filesystems") : null), - tag: "pool" - }, - { - title: _("Delete pool"), - action: () => delete_pool(pool), - danger: true, - tag: "pool", }, ], }); @@ -416,14 +421,6 @@ export function make_stratis_pool_page(parent, pool) { } const StratisPoolPage = ({ page, pool, degraded_ops, can_grow, managed_fsys_sizes, stats }) => { - const key_desc = (pool.Encrypted && - pool.KeyDescription[0] && - pool.KeyDescription[1][1]); - const can_tang = (client.features.stratis_crypto_binding && - pool.Encrypted && - pool.ClevisInfo[0] && // pool has consistent clevis config - (!pool.ClevisInfo[1][0] || pool.ClevisInfo[1][1][0] == "tang")); // not bound or bound to "tang" - const tang_url = can_tang && pool.ClevisInfo[1][0] ? JSON.parse(pool.ClevisInfo[1][1][1]).url : null; const blockdevs = client.stratis_pool_blockdevs[pool.path] || []; function grow_blockdevs() { @@ -461,6 +458,33 @@ const StratisPoolPage = ({ page, pool, degraded_ops, can_grow, managed_fsys_size ); } + return ( + + {alerts} + + }> + + + + + + + + ); +}; + +const StratisPoolContainer = ({ container, pool, degraded_ops, can_grow, managed_fsys_sizes, stats }) => { + const key_desc = (pool.Encrypted && + pool.KeyDescription[0] && + pool.KeyDescription[1][1]); + const can_tang = (client.features.stratis_crypto_binding && + pool.Encrypted && + pool.ClevisInfo[0] && // pool has consistent clevis config + (!pool.ClevisInfo[1][0] || pool.ClevisInfo[1][1][0] == "tang")); // not bound or bound to "tang" + const tang_url = can_tang && pool.ClevisInfo[1][0] ? JSON.parse(pool.ClevisInfo[1][1][1]).url : null; + function add_passphrase() { dialog_open({ Title: _("Add passphrase"), @@ -598,70 +622,59 @@ const StratisPoolPage = ({ page, pool, degraded_ops, can_grow, managed_fsys_size const use = pool.TotalPhysicalUsed[0] && [Number(pool.TotalPhysicalUsed[1]), Number(pool.TotalPhysicalSize)]; return ( - - {alerts} - - }> - - - rename_pool(pool)}> - {_("edit")} - } /> - - { !managed_fsys_sizes && use && - - - - } - { pool.Encrypted && client.features.stratis_crypto_binding && - - - { !key_desc - ? {_("Add passphrase")} - : <> - {_("Change")} - - - {_("Remove")} - - - - } - - + }> + + + rename_pool(pool)}> + {_("edit")} + } /> + + { !managed_fsys_sizes && use && + + + + } + { pool.Encrypted && client.features.stratis_crypto_binding && + + + { !key_desc + ? {_("Add passphrase")} + : <> + {_("Change")} + + + {_("Remove")} + + + } - { can_tang && - - - { tang_url == null - ? {_("Add keyserver")} - : <> - { tang_url } - - - {_("Remove")} - - - - } - - + + + } + { can_tang && + + + { tang_url == null + ? {_("Add keyserver")} + : <> + { tang_url } + + + {_("Remove")} + + + } - - - - - - - - - + + + } + + + ); };