02b6520f09
* Initial reword of upload to MVVM. * Update tests * More incremental improvements * Refactor tests to use helper method for composer uploads. * Add drag and drop tests * lint * Add commentary * fixup test * More precise selector * Retarget uploads * lint * fixup * one more type * update snap * Fixup composerUploadFiles * fix import * lint * Copy and paste fixes too * Add tests for pasting * Add tests for pasting files. * Remove redundant fn * rm comment * tidy up * Test cleanup * More clean up * another fix * Begin fleshing out * Park changes * More stuff * Use condensed version * Cleanup tests * more cleaning * last bity * Add a test for the composer * Park up changes * Rewrite Measured to be a functional component * Add tests to cover narrow viewports * lint * breakpoint is optional * Cleanup * Support narrow mode * fixup * begone * Provide default value * add label * fixup test * update copyright * cleanup * Be a bit more lazy with FileDropTarget * remove a debug statement * Fixup * fix two snaps * Update screenshot * and the other one * Update snaps * unfake CIDER * update screens again * remove extra test * Undo accidental snapshots * Bit of tidyup * fixup * even more tidyup * may drag and drop file * tidy up again * snap snap snap * Use load to make sonarQube happy * Bunch of refactors * More cleanup * cleanup debug code * tweaks * remove a test we no longer need * make it happy * fix import * fixup * Update snaps * typo * one off * Add tests * lint * remove only * Reduce screenshot scope * fix snapshot usage * cleanup
94 lines
2.6 KiB
TypeScript
94 lines
2.6 KiB
TypeScript
/*
|
|
* Copyright (c) 2026 Element Creations Ltd.
|
|
*
|
|
* SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only OR LicenseRef-Element-Commercial
|
|
* Please see LICENSE files in the repository root for full details.
|
|
*/
|
|
|
|
import React, { type JSX } from "react";
|
|
import { type StoryObj, type Meta } from "@storybook/react-vite";
|
|
import { fn } from "storybook/test";
|
|
import { AttachmentIcon, ReactionIcon } from "@vector-im/compound-design-tokens/assets/web/icons";
|
|
|
|
import { UploadButton, type UploadButtonViewActions, type UploadButtonViewSnapshot } from "./UploadButton";
|
|
import { useMockedViewModel } from "../../../core/viewmodel";
|
|
import { withViewDocs } from "../../../../.storybook/withViewDocs";
|
|
|
|
const UploadButtonWrapperImpl = ({
|
|
onUploadOptionSelected,
|
|
defaultOpen,
|
|
...rest
|
|
}: UploadButtonViewSnapshot & UploadButtonViewActions & { defaultOpen: boolean }): JSX.Element => {
|
|
const vm = useMockedViewModel(rest, {
|
|
onUploadOptionSelected,
|
|
});
|
|
return <UploadButton defaultOpen={defaultOpen} vm={vm} />;
|
|
};
|
|
|
|
const UploadButtonWrapper = withViewDocs(UploadButtonWrapperImpl, UploadButton);
|
|
|
|
const meta = {
|
|
title: "Room/UploadButton",
|
|
component: UploadButtonWrapper,
|
|
tags: ["autodocs"],
|
|
args: {
|
|
defaultOpen: false,
|
|
onUploadOptionSelected: fn(),
|
|
options: [
|
|
{
|
|
type: "local",
|
|
label: "Attachment",
|
|
icon: AttachmentIcon,
|
|
},
|
|
{
|
|
label: "Fun Button",
|
|
icon: ReactionIcon,
|
|
type: "fun",
|
|
},
|
|
],
|
|
},
|
|
} satisfies Meta<typeof UploadButtonWrapper>;
|
|
|
|
export default meta;
|
|
type Story = StoryObj<typeof meta>;
|
|
|
|
export const Default: Story = {};
|
|
|
|
export const WithOneOption: Story = {
|
|
// No visible difference
|
|
tags: ["skip-test"],
|
|
args: {
|
|
options: [
|
|
{
|
|
type: "local",
|
|
label: "Attachment",
|
|
icon: AttachmentIcon,
|
|
},
|
|
],
|
|
},
|
|
};
|
|
|
|
export const WithOpen: Story = {
|
|
args: {
|
|
defaultOpen: true,
|
|
},
|
|
parameters: {
|
|
a11y: {
|
|
config: {
|
|
rules: [
|
|
{
|
|
// Menu contains a header which is invalid
|
|
id: "aria-required-children",
|
|
enabled: false,
|
|
},
|
|
{
|
|
// Menu pops open by default
|
|
id: "aria-hidden-focus",
|
|
enabled: false,
|
|
},
|
|
],
|
|
},
|
|
},
|
|
},
|
|
};
|