Page Menu
Home
Sealhub
Search
Configure Global Search
Log In
Files
F969356
component-input.tsx
No One
Temporary
Actions
Download File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Award Token
Flag For Later
Size
3 KB
Referenced Files
None
Subscribers
None
component-input.tsx
View Options
import
{
printArgPath
}
from
"./print-arg-path.js"
;
import
type
{
BaseContext
}
from
"koa"
;
import
type
{
ComponentArgument
,
TableData
}
from
"@sealcode/jdd"
;
import
{
ComponentArguments
,
Enum
,
Image
,
List
,
Structured
,
Table
}
from
"@sealcode/jdd"
;
import
{
ComponentInputStructured
}
from
"./component-input-structured.js"
;
import
type
{
StatefulPage
}
from
"@sealcode/sealgen"
;
import
type
{
ComponentPreviewActions
}
from
"./component-preview-actions.js"
;
import
{
ComponentInputList
}
from
"./component-input-list.js"
;
import
type
{
JDDPageState
}
from
"./jdd-page.js"
;
import
{
ComponentInputEnum
}
from
"./component-input-enum.js"
;
import
{
ComponentInputImage
}
from
"./component-input-image.js"
;
import
{
ComponentInputTable
}
from
"./component-input-table.js"
;
import
{
TempstreamJSX
}
from
"tempstream"
;
import
type
{
FilePointer
}
from
"@sealcode/file-manager"
;
import
{
is
,
predicates
}
from
"@sealcode/ts-predicates"
;
export
const
actionName
=
"Components"
;
const
absoluteUrlPattern
=
"http(s?)(://)((www.)?)(([^.]+).)?([a-zA-z0-9-_]+)"
;
export
async
function
ComponentInput
<
State
extends
JDDPageState
,
T
>
({
ctx
,
state
,
arg_path
,
arg
,
value
,
page
,
}
:
{
state
:
State
;
ctx
:
BaseContext
;
arg_path
:
string
[];
arg
:
ComponentArgument
<
T
>
;
value
:
T
;
page
:
StatefulPage
<
JDDPageState
,
typeof
ComponentPreviewActions
>
;
})
:
Promise
<
string
>
{
if
(
value
===
undefined
)
{
value
=
arg
.
getEmptyValue
();
}
if
(
arg
instanceof
List
)
{
// eslint-disable-next-line @typescript-eslint/consistent-type-assertions
return
ComponentInputList
({
ctx
,
state
,
arg_path
,
arg
,
// eslint-disable-next-line @typescript-eslint/consistent-type-assertions
value
:
value
as
T
[],
page
,
});
}
const
argType
=
arg
.
getTypeName
();
const
isUrlAbsolute
=
arg
instanceof
ComponentArguments
.
URL
&&
arg
.
urlType
===
"absolute"
;
const
inputType
=
isUrlAbsolute
?
"url"
:
"text"
;
if
(
arg
instanceof
Structured
)
{
return
ComponentInputStructured
({
ctx
,
state
,
arg_path
,
arg
,
// eslint-disable-next-line @typescript-eslint/consistent-type-assertions
value
:
value
as
Record
<
string
,
unknown
>
,
page
,
});
}
if
(
arg
instanceof
Enum
)
{
return
ComponentInputEnum
({
state
,
arg_path
,
arg
,
// eslint-disable-next-line @typescript-eslint/consistent-type-assertions
value
:
value
as
string
,
onchange
:
page
.
rerender
(),
});
}
if
(
arg
instanceof
Image
)
{
return
ComponentInputImage
({
ctx
,
state
,
arg_path
,
arg
,
// eslint-disable-next-line @typescript-eslint/consistent-type-assertions
value
:
value
as
FilePointer
,
page
,
});
}
if
(
arg
instanceof
Table
)
{
return
ComponentInputTable
({
ctx
,
state
,
arg_path
,
arg
,
// eslint-disable-next-line @typescript-eslint/consistent-type-assertions
value
:
value
as
TableData
<
unknown
,
unknown
>
,
page
,
});
}
return
(
<
div
>
<
label
>
{
arg_path
.
at
(
-
1
)
||
""
}
{
argType
==
"markdown"
?
(
<
textarea
name
=
{
`$
${
printArgPath
(
arg_path
)
}
`
}
onblur
=
{
page
.
rerender
()}
cols
=
"40"
>
{
is
(
value
,
predicates
.
string
)
?
value
:
""
}
<
/textarea>
)
:
(
<
input
type
=
{
inputType
}
name
=
{
`$
${
printArgPath
(
arg_path
)
}
`
}
value
=
{
is
(
value
,
predicates
.
string
)
?
value
:
""
}
size
=
"40"
pattern
=
{
isUrlAbsolute
?
absoluteUrlPattern
:
undefined
}
/>
)}
<
/label>
<
/div>
);
}
File Metadata
Details
Attached
Mime Type
text/x-java
Expires
Fri, Nov 22, 20:14 (18 h, 39 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
547734
Default Alt Text
component-input.tsx (3 KB)
Attached To
Mode
rPLAY Sealious playground
Attached
Detach File
Event Timeline
Log In to Comment