参考 https://aws.amazon.com/jp/solutions/implementations/workload-discovery-on-aws/ https://mui.com/ →Material UI 使えば大体良さそう
ページはこういう感じにしたい https://developer.pagerduty.com/api-reference/9def78ed82b74-list-abilities
試してみる
AWS NorthStar
https://northstar.aws-prototyping.cloud/#/Getting%20Started → CodeCatalyst だと デフォルト React Version が v18 なので依存で失敗。やめる
Material UI
npm install @mui/material @emotion/react @emotion/styled
大昔に使っていたが、アイコンやボタン単位ぐらいでしか使ってなかった記憶
こんな感じで右 JSON 左要素にしたい。 垂直分割後、左は水平分割する https://developer.pagerduty.com/api-reference/9def78ed82b74-list-abilities
最低限クラスベースラインは組み込むこと。これで CSS リセットする
import CssBaseline from '@mui/material/CssBaseline'
https://dev.classmethod.jp/articles/using-the-management-screen-template-of-mui/ これみて Dashboard sample を確認する
流石に React 開発は us-west-2 では辛すぎる
リポジトリは Catalyst におきつつ、開発はローカルでした方が良さそう
material-ui のスタイル 調査
sx 属性にスタイル記載する
-
テーマ一覧
-
MUI テーマ作成
-
Demoサイト
- https://mui.com/ このテーマを参考にする。最後は aws-northstar を使うかも
-
作成補助
- https://codesandbox.io/s/kqv1w
- 1.React Paper component - Material UI
まずはチーム構造から
teams
以下 pie chart を使って実装 https://www.npmjs.com/package/@mui/icons-material
npm i react-minimal-pie-chart
<PieChart
animate
animationDuration={500}
animationEasing="ease-out"
radius={19}
startAngle={15}
// rounded={true}
// lineWidth={20}
segmentsShift={5}
data={[
{ title: 'One', value: 4, color: '#E38627' },
{ title: 'Two', value: 4, color: '#C13C37' },
{ title: 'Three', value: 1, color: '#6A2135' },
]}
label={({ x,y ,dx,dy, dataEntry}) => {
const items = [];
for(let i = 0; i< dataEntry.value; i++) {
items.push(
<svg width="5px" x={x-5 + dx + i * 4} y={dy}>
<PersonIcon></PersonIcon>
</svg>
);
}
items.push(<text x={x-4 + dx} y={y + dy + 6} fontSize='calc(0.1px + 0.5vmin)' fill="white">{dataEntry.value} players</text>)
return (<svg>{ items }</svg>)
}}
labelPosition={150}
/>
attributes
// https://mui.com/material-ui/react-list/
function AttributeListItem(props: any) {
return (
<>
<Paper sx={{ p: 0.5 }}>{props.item.name}</Paper>
<Paper sx={{ p: 0.5, m: 0.5, width: '100px', textAlign: 'center' }}>
{props.item.type}
</Paper>
</>
)
}
export default function Attributes() {
const attributesdata = [
{ name: 'LV', type: 'string' },
{ name: 'Role', type: 'string_list' },
{ name: 'Role', type: 'string_list' },
]
const listItems = attributesdata.map((i) => (
<TableRow
sx={{
m: 1,
display: 'flex',
flexDirection: 'column',
justifyContent: 'center',
}}
>
<AttributeListItem item={i} />
</TableRow>
))
return (
<>
<TableContainer sx={{ maxHeight: '100%' }}>
<Table sx={{ maxHeight: '100px' }}>
<TableBody>{listItems}</TableBody>
</Table>
</TableContainer>
</>
)
}
Rules
アイコンを自作しないと行けなさそう https://boxy-svg.com/