mirror of
https://github.com/supabase/supabase.git
synced 2026-10-12 04:45:08 +03:00
* chore: cleanup packages - Avoid circular imports - Export API-types as types - pg-format without depending on Node internal Buffer (not browser-compatible) - Avoid importing from barrel files in ui dir * chore: avoid barrel file imports in studio (#27771) * chore: avoid barrel file imports - Removes some unused imports - Avoids barrel file import for faster builds + less memory * add eslint rule * type fixes * delete layouts barrel * delete components/grid barrel file * delete components/grid/utils barrel file * delete components/grid/components/common barrel file * delete components/grid/components/editor barrel file * delete components/grid/components/formatter barrel file * delete components/grid/components/grid barrel file * delete components/grid/components/header/filter barrel file * remote components/grid/store barrel file * remove components/interfaces/Auth/Policies barrel file * delete components/interfaces/Settings/Logs barrel file * delete components/ui/CodeEditor barrel file * delete components/ui/Forms barrel file * delete components/ui/Shimmers barrel file * delete data/analytics barrel file * delete hooks barrel file * cleanup lib/common/fetch barrel file * final * barral files cleanup * global react-data-grid styles * remove console.log --------- Co-authored-by: Kevin Grüneberg <k.grueneberg1994@gmail.com> * fix build --------- Co-authored-by: Kevin Grüneberg <k.grueneberg1994@gmail.com>
74 lines
2.1 KiB
TypeScript
74 lines
2.1 KiB
TypeScript
import { useEffect, useState } from 'react'
|
|
|
|
import CodeEditor from 'components/ui/CodeEditor/CodeEditor'
|
|
import { tryParseJson } from 'lib/helpers'
|
|
import { Input, Modal } from 'ui'
|
|
|
|
interface SendMessageModalProps {
|
|
visible: boolean
|
|
onSelectCancel: () => void
|
|
onSelectConfirm: (v: { message: string; payload: string }) => void
|
|
}
|
|
|
|
const defaultPayload = {
|
|
message: 'Test message',
|
|
payload: '{ "message": "Hello World" }',
|
|
}
|
|
|
|
export const SendMessageModal = ({
|
|
visible,
|
|
onSelectCancel,
|
|
onSelectConfirm,
|
|
}: SendMessageModalProps) => {
|
|
const [error, setError] = useState<string>()
|
|
const [values, setValues] = useState(defaultPayload)
|
|
|
|
useEffect(() => {
|
|
if (visible) {
|
|
setError(undefined)
|
|
setValues(defaultPayload)
|
|
}
|
|
}, [visible])
|
|
|
|
return (
|
|
<Modal
|
|
size="medium"
|
|
alignFooter="right"
|
|
header="Broadcast a message to all clients"
|
|
visible={visible}
|
|
loading={false}
|
|
onCancel={onSelectCancel}
|
|
onConfirm={() => {
|
|
const payload = tryParseJson(values.payload)
|
|
if (payload === undefined) {
|
|
setError('Please provide a valid JSON')
|
|
} else {
|
|
onSelectConfirm({ ...values, payload })
|
|
}
|
|
}}
|
|
>
|
|
<Modal.Content className="flex flex-col gap-y-4">
|
|
<Input
|
|
label="Message name"
|
|
size="small"
|
|
className="flex-grow"
|
|
value={values.message}
|
|
onChange={(v) => setValues({ ...values, message: v.target.value })}
|
|
/>
|
|
<div className="flex flex-col gap-y-2">
|
|
<p className="text-sm text-scale-1100">Message payload</p>
|
|
<CodeEditor
|
|
id="message-payload"
|
|
language="json"
|
|
className="!mb-0 h-32 overflow-hidden rounded border"
|
|
onInputChange={(e: string | undefined) => setValues({ ...values, payload: e ?? '{}' })}
|
|
options={{ wordWrap: 'off', contextmenu: false }}
|
|
value={values.payload}
|
|
/>
|
|
{error !== undefined && <p className="text-sm text-red-900">{error}</p>}
|
|
</div>
|
|
</Modal.Content>
|
|
</Modal>
|
|
)
|
|
}
|