Skip to content

Commit c351ab3

Browse files
committed
chore(rte): styling of image dialog
1 parent 3ef8dda commit c351ab3

File tree

4 files changed

+83
-26
lines changed

4 files changed

+83
-26
lines changed

packages/pluggableWidgets/rich-text-web/src/__mocks__/quill-resize-module.ts

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,10 +5,18 @@ export class QuillResizeToolbar {
55
}
66
}
77

8+
// eslint-disable-next-line @typescript-eslint/no-extraneous-class
9+
export class QuillResizeResize {
10+
constructor() {
11+
return this;
12+
}
13+
}
14+
815
// eslint-disable-next-line @typescript-eslint/no-extraneous-class
916
export default class QuillResize {
1017
static Modules = {
11-
Toolbar: QuillResizeToolbar
18+
Toolbar: QuillResizeToolbar,
19+
Resize: QuillResizeResize
1220
};
1321
constructor() {
1422
return this;

packages/pluggableWidgets/rich-text-web/src/components/ModalDialog/Dialog.scss

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,9 +30,44 @@
3030
}
3131
}
3232

33+
&.image-dialog {
34+
.image-dialog-size {
35+
input {
36+
min-width: 20px;
37+
&[disabled] {
38+
text-decoration: line-through;
39+
}
40+
}
41+
42+
&-input {
43+
flex: 2;
44+
align-items: center;
45+
justify-content: center;
46+
}
47+
48+
&-label {
49+
flex: 1;
50+
align-items: center;
51+
justify-content: flex-end;
52+
padding-right: var(--spacing-medium, 16px);
53+
}
54+
55+
&-container {
56+
align-items: center;
57+
justify-content: center;
58+
}
59+
}
60+
61+
.image-dialog-upload {
62+
max-height: var(--max-dialog-height, 70vh);
63+
overflow-y: auto;
64+
}
65+
}
66+
3367
.nav-tabs {
3468
li {
3569
cursor: pointer;
70+
3671
a {
3772
pointer-events: none;
3873
}
@@ -57,6 +92,7 @@
5792

5893
.mx-image-dialog-thumbnail {
5994
max-height: 100px;
95+
6096
&-small {
6197
max-height: 50px;
6298
}
@@ -79,6 +115,7 @@
79115
background-color: var(--color-background, #fff);
80116
cursor: pointer;
81117
transition: transform 0.2s ease-in-out;
118+
82119
&:hover {
83120
transform: scale3d(1.05, 1.05, 1);
84121
}

packages/pluggableWidgets/rich-text-web/src/components/ModalDialog/ImageDialog.tsx

Lines changed: 36 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import { If } from "@mendix/widget-plugin-component-kit/If";
22
import classNames from "classnames";
3-
import { ChangeEvent, createElement, ReactElement, useEffect, useRef, useState } from "react";
3+
import { ChangeEvent, createElement, ReactElement, SyntheticEvent, useEffect, useRef, useState } from "react";
44
import { RichTextContainerProps } from "../../../typings/RichTextProps";
55
import { type imageConfigType } from "../../utils/formats";
66
import { IMG_MIME_TYPES } from "../CustomToolbars/constants";
@@ -109,6 +109,10 @@ export default function ImageDialog(props: ImageDialogProps): ReactElement {
109109
setSelectedImageEntity(undefined);
110110
};
111111

112+
const onImageLoaded = (e: SyntheticEvent<HTMLImageElement>): void => {
113+
setFormState({ ...formState, width: e.currentTarget.naturalWidth, height: e.currentTarget.naturalHeight });
114+
};
115+
112116
useEffect(() => {
113117
// event listener for image selection triggered from custom widgets JS Action
114118
const imgRef = imageUploadElementRef.current;
@@ -123,7 +127,7 @@ export default function ImageDialog(props: ImageDialogProps): ReactElement {
123127
}, [imageUploadElementRef.current]);
124128

125129
return (
126-
<DialogContent className="video-dialog">
130+
<DialogContent className="image-dialog">
127131
<DialogHeader onClose={onClose}>{activeTab === "general" ? "Insert/Edit" : "Embed"} Images</DialogHeader>
128132
<DialogBody>
129133
<div ref={imageUploadElementRef}>
@@ -170,6 +174,7 @@ export default function ImageDialog(props: ImageDialogProps): ReactElement {
170174
src={selectedImageEntity.thumbnailUrl || selectedImageEntity.url}
171175
alt={selectedImageEntity.id}
172176
className="mx-image-dialog-thumbnail-small"
177+
onLoad={onImageLoaded}
173178
/>
174179
<span className="icon-container">
175180
<span className="icons icon-Delete" onClick={onEmbedDeleted}></span>
@@ -195,28 +200,35 @@ export default function ImageDialog(props: ImageDialogProps): ReactElement {
195200
ref={inputReference}
196201
/>
197202
</FormControl>
198-
<FormControl label="Width">
199-
<input
200-
className="form-control"
201-
type="number"
202-
name="width"
203-
onChange={onInputChange}
204-
value={formState.width}
205-
/>
206-
px
207-
</FormControl>
208-
<FormControl label="Height">
209-
<input
210-
className="form-control"
211-
type="number"
212-
name="height"
213-
onChange={onInputChange}
214-
value={formState.height}
215-
disabled={formState.keepAspectRatio}
216-
/>
217-
px
203+
<FormControl label="Width" className="image-dialog-size">
204+
<div className="flexcontainer image-dialog-size-container">
205+
<div className="flexcontainer image-dialog-size-input">
206+
<input
207+
className="form-control"
208+
type="number"
209+
name="width"
210+
onChange={onInputChange}
211+
value={formState.width}
212+
/>
213+
<span>px</span>
214+
</div>
215+
<div className="flexcontainer image-dialog-size-label">
216+
<label className="control-label">Height</label>
217+
</div>
218+
<div className="flexcontainer image-dialog-size-input">
219+
<input
220+
className="form-control"
221+
type="number"
222+
name="height"
223+
onChange={onInputChange}
224+
value={formState.height}
225+
disabled={formState.keepAspectRatio}
226+
/>
227+
<span>px</span>
228+
</div>
229+
</div>
218230
</FormControl>
219-
<FormControl label="Keep aspect ratio">
231+
<FormControl label="Keep ratio">
220232
<input
221233
type="checkbox"
222234
name="keepAspectRatio"
@@ -227,7 +239,7 @@ export default function ImageDialog(props: ImageDialogProps): ReactElement {
227239
<DialogFooter onSubmit={() => onSubmit(formState)} onClose={onClose}></DialogFooter>
228240
</If>
229241
<If condition={activeTab === "embed"}>
230-
<div>{imageSourceContent}</div>
242+
<div className="image-dialog-upload">{imageSourceContent}</div>
231243
</If>
232244
</div>
233245
</div>

packages/pluggableWidgets/rich-text-web/src/utils/modules/resize.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ type limitType = {
2222

2323
type eventType = { clientX: number; clientY: number };
2424
// eslint-disable-next-line no-unsafe-optional-chaining
25-
export default class MxResize extends QuillResize.Modules?.Resize {
25+
export default class MxResize extends QuillResize.Modules.Resize {
2626
// modified from https://github.com/mudoo/quill-resize-module/blob/master/src/modules/Resize.js
2727
calcSize(evt: eventType, limit: limitType = {}): resultSizeType {
2828
// update size

0 commit comments

Comments
 (0)