import AccordianItem from './accordian-item' import { Col, InputGroup, Row, Form as BootstrapForm, Badge } from 'react-bootstrap' import { Checkbox, CheckboxGroup, Form, Input, MarkdownInput } from './form' import FeeButton, { FeeButtonProvider } from './fee-button' import { gql, useApolloClient, useMutation } from '@apollo/client' import { useCallback, useState } from 'react' import { useRouter } from 'next/router' import { MAX_TERRITORY_DESC_LENGTH, POST_TYPES, TERRITORY_BILLING_OPTIONS } from '../lib/constants' import { territorySchema } from '../lib/validate' import { useMe } from './me' import Info from './info' export default function TerritoryForm ({ sub }) { const router = useRouter() const client = useApolloClient() const me = useMe() const [upsertSub] = useMutation( gql` mutation upsertSub($oldName: String, $name: String!, $desc: String, $baseCost: Int!, $postTypes: [String!]!, $allowFreebies: Boolean!, $billingType: String!, $billingAutoRenew: Boolean!, $moderated: Boolean!, $hash: String, $hmac: String, $nsfw: Boolean!) { upsertSub(oldName: $oldName, name: $name, desc: $desc, baseCost: $baseCost, postTypes: $postTypes, allowFreebies: $allowFreebies, billingType: $billingType, billingAutoRenew: $billingAutoRenew, moderated: $moderated, hash: $hash, hmac: $hmac, nsfw: $nsfw) { name } }` ) const onSubmit = useCallback( async ({ ...variables }) => { const { error } = await upsertSub({ variables: { oldName: sub?.name, ...variables } }) if (error) { throw new Error({ message: error.toString() }) } // modify graphql cache to include new sub client.cache.modify({ fields: { subs (existing = []) { const filtered = existing.filter(s => s.name !== variables.name && s.name !== sub?.name) return [ ...filtered, { __typename: 'Sub', name: variables.name }] } } }) await router.push(`/~${variables.name}`) }, [client, upsertSub, router] ) const [billing, setBilling] = useState((sub?.billingType || 'MONTHLY').toLowerCase()) return (
~} /> sats} /> {(!sub?.billingType || sub.billingType === 'MONTHLY') && checked && setBilling('monthly')} groupClassName='ms-1 mb-0' />} {(!sub?.billingType || sub.billingType === 'YEARLY') && checked && setBilling('yearly')} groupClassName='ms-1 mb-0' />} {(!sub?.billingType || sub.billingType === 'ONCE') && checked && setBilling('once')} groupClassName='ms-1 mb-0' />} {billing !== 'once' && } options} body={ <> moderation enable moderation
  1. Outlaw posts and comments with a click
  2. Your territory will get a moderated badge
} name='moderated' groupClassName='ms-1' /> nsfw mark as nsfw
  1. Let stackers know that your territory may contain explicit content
  2. Your territory will get a nsfw badge
} name='nsfw' groupClassName='ms-1' /> } />
) }