Update New Whitelist UI
This commit is contained in:
parent
31ed420a77
commit
f422b9458b
@ -1,8 +1,11 @@
|
|||||||
import { FormControl } from 'components/FormControl'
|
import { FormControl } from 'components/FormControl'
|
||||||
import { FormGroup } from 'components/FormGroup'
|
import { FormGroup } from 'components/FormGroup'
|
||||||
|
import { AddressList } from 'components/forms/AddressList'
|
||||||
|
import { useAddressListState } from 'components/forms/AddressList.hooks'
|
||||||
import { useInputState, useNumberInputState } from 'components/forms/FormInput.hooks'
|
import { useInputState, useNumberInputState } from 'components/forms/FormInput.hooks'
|
||||||
import { InputDateTime } from 'components/InputDateTime'
|
import { InputDateTime } from 'components/InputDateTime'
|
||||||
import React, { useEffect, useState } from 'react'
|
import React, { useEffect, useState } from 'react'
|
||||||
|
import { isValidAddress } from 'utils/isValidAddress'
|
||||||
|
|
||||||
import { Conditional } from '../../Conditional'
|
import { Conditional } from '../../Conditional'
|
||||||
import { AddressInput, NumberInput } from '../../forms/FormInput'
|
import { AddressInput, NumberInput } from '../../forms/FormInput'
|
||||||
@ -22,6 +25,8 @@ export interface WhitelistDetailsDataProps {
|
|||||||
endTime?: string
|
endTime?: string
|
||||||
perAddressLimit?: number
|
perAddressLimit?: number
|
||||||
memberLimit?: number
|
memberLimit?: number
|
||||||
|
admins?: string[]
|
||||||
|
adminsMutable?: boolean
|
||||||
}
|
}
|
||||||
|
|
||||||
type WhitelistState = 'none' | 'existing' | 'new'
|
type WhitelistState = 'none' | 'existing' | 'new'
|
||||||
@ -31,6 +36,7 @@ export const WhitelistDetails = ({ onChange }: WhitelistDetailsProps) => {
|
|||||||
const [startDate, setStartDate] = useState<Date | undefined>(undefined)
|
const [startDate, setStartDate] = useState<Date | undefined>(undefined)
|
||||||
const [endDate, setEndDate] = useState<Date | undefined>(undefined)
|
const [endDate, setEndDate] = useState<Date | undefined>(undefined)
|
||||||
const [whitelistArray, setWhitelistArray] = useState<string[]>([])
|
const [whitelistArray, setWhitelistArray] = useState<string[]>([])
|
||||||
|
const [adminsMutable, setAdminsMutable] = useState<boolean>(false)
|
||||||
|
|
||||||
const whitelistAddressState = useInputState({
|
const whitelistAddressState = useInputState({
|
||||||
id: 'whitelist-address',
|
id: 'whitelist-address',
|
||||||
@ -63,6 +69,8 @@ export const WhitelistDetails = ({ onChange }: WhitelistDetailsProps) => {
|
|||||||
placeholder: '5',
|
placeholder: '5',
|
||||||
})
|
})
|
||||||
|
|
||||||
|
const addressListState = useAddressListState()
|
||||||
|
|
||||||
const whitelistFileOnChange = (data: string[]) => {
|
const whitelistFileOnChange = (data: string[]) => {
|
||||||
setWhitelistArray(data)
|
setWhitelistArray(data)
|
||||||
}
|
}
|
||||||
@ -82,6 +90,14 @@ export const WhitelistDetails = ({ onChange }: WhitelistDetailsProps) => {
|
|||||||
endTime: endDate ? (endDate.getTime() * 1_000_000).toString() : '',
|
endTime: endDate ? (endDate.getTime() * 1_000_000).toString() : '',
|
||||||
perAddressLimit: perAddressLimitState.value,
|
perAddressLimit: perAddressLimitState.value,
|
||||||
memberLimit: memberLimitState.value,
|
memberLimit: memberLimitState.value,
|
||||||
|
admins: [
|
||||||
|
...new Set(
|
||||||
|
addressListState.values
|
||||||
|
.map((a) => a.address.trim())
|
||||||
|
.filter((address) => address !== '' && isValidAddress(address.trim()) && address.startsWith('stars')),
|
||||||
|
),
|
||||||
|
],
|
||||||
|
adminsMutable,
|
||||||
}
|
}
|
||||||
onChange(data)
|
onChange(data)
|
||||||
// eslint-disable-next-line react-hooks/exhaustive-deps
|
// eslint-disable-next-line react-hooks/exhaustive-deps
|
||||||
@ -94,6 +110,8 @@ export const WhitelistDetails = ({ onChange }: WhitelistDetailsProps) => {
|
|||||||
endDate,
|
endDate,
|
||||||
whitelistArray,
|
whitelistArray,
|
||||||
whitelistState,
|
whitelistState,
|
||||||
|
addressListState.values,
|
||||||
|
adminsMutable,
|
||||||
])
|
])
|
||||||
|
|
||||||
return (
|
return (
|
||||||
@ -186,6 +204,28 @@ export const WhitelistDetails = ({ onChange }: WhitelistDetailsProps) => {
|
|||||||
</FormControl>
|
</FormControl>
|
||||||
</FormGroup>
|
</FormGroup>
|
||||||
<div>
|
<div>
|
||||||
|
<div className="mt-2 ml-3 w-full form-control">
|
||||||
|
<label className="justify-start cursor-pointer label">
|
||||||
|
<span className="mr-4 font-bold">Mutable Administrator Addresses</span>
|
||||||
|
<input
|
||||||
|
checked={adminsMutable}
|
||||||
|
className={`toggle ${adminsMutable ? `bg-stargaze` : `bg-gray-600`}`}
|
||||||
|
onClick={() => setAdminsMutable(!adminsMutable)}
|
||||||
|
type="checkbox"
|
||||||
|
/>
|
||||||
|
</label>
|
||||||
|
</div>
|
||||||
|
<div className="my-4 ml-4">
|
||||||
|
<AddressList
|
||||||
|
entries={addressListState.entries}
|
||||||
|
isRequired
|
||||||
|
onAdd={addressListState.add}
|
||||||
|
onChange={addressListState.update}
|
||||||
|
onRemove={addressListState.remove}
|
||||||
|
subtitle="The list of administrator addresses"
|
||||||
|
title="Administrator Addresses"
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
<FormGroup subtitle="TXT file that contains the whitelisted addresses" title="Whitelist File">
|
<FormGroup subtitle="TXT file that contains the whitelisted addresses" title="Whitelist File">
|
||||||
<WhitelistUpload onChange={whitelistFileOnChange} />
|
<WhitelistUpload onChange={whitelistFileOnChange} />
|
||||||
</FormGroup>
|
</FormGroup>
|
||||||
|
@ -377,8 +377,8 @@ const CollectionCreationPage: NextPage = () => {
|
|||||||
mint_price: coin(String(Number(whitelistDetails?.unitPrice)), 'ustars'),
|
mint_price: coin(String(Number(whitelistDetails?.unitPrice)), 'ustars'),
|
||||||
per_address_limit: whitelistDetails?.perAddressLimit,
|
per_address_limit: whitelistDetails?.perAddressLimit,
|
||||||
member_limit: whitelistDetails?.memberLimit,
|
member_limit: whitelistDetails?.memberLimit,
|
||||||
admins: [wallet.address],
|
admins: whitelistDetails?.admins || [wallet.address],
|
||||||
admins_mutable: true,
|
admins_mutable: whitelistDetails?.adminsMutable,
|
||||||
}
|
}
|
||||||
|
|
||||||
const data = await whitelistContract.instantiate(1835, msg, 'Stargaze Whitelist Contract', wallet.address)
|
const data = await whitelistContract.instantiate(1835, msg, 'Stargaze Whitelist Contract', wallet.address)
|
||||||
|
Loading…
Reference in New Issue
Block a user