Show territory details in post form (#725)

* Show territory details in post form

* Style territory details in post form

* Keep details closed by default

* Use SUB_FULL

* Undo unused changes to specify accordian default

---------

Co-authored-by: ekzyis <ek@stacker.news>
This commit is contained in:
ekzyis 2024-01-09 00:46:23 +01:00 committed by GitHub
parent 2151323c8d
commit f8cbd43be7
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 43 additions and 32 deletions

View File

@ -14,6 +14,7 @@ import { useCallback, useState } from 'react'
import FeeButton, { FeeButtonProvider, postCommentBaseLineItems, postCommentUseRemoteLineItems } from './fee-button' import FeeButton, { FeeButtonProvider, postCommentBaseLineItems, postCommentUseRemoteLineItems } from './fee-button'
import Delete from './delete' import Delete from './delete'
import CancelButton from './cancel-button' import CancelButton from './cancel-button'
import { TerritoryDetails } from './territory-header'
export function PostForm ({ type, sub, children }) { export function PostForm ({ type, sub, children }) {
const me = useMe() const me = useMe()
@ -98,14 +99,18 @@ export function PostForm ({ type, sub, children }) {
}, []) }, [])
return ( return (
<div className='position-relative align-items-center'> <div className='position-relative d-flex flex-column align-items-center'>
{errorMessage && {errorMessage &&
<Alert className='position-absolute' style={{ top: '-6rem' }} variant='danger' onClose={() => setErrorMessage(undefined)} dismissible> <Alert className='position-absolute' style={{ top: '-6rem' }} variant='danger' onClose={() => setErrorMessage(undefined)} dismissible>
{errorMessage} {errorMessage}
</Alert>} </Alert>}
<SubSelect prependSubs={['pick territory']} className='w-auto d-flex' noForm sub={sub?.name} hint={sub?.moderated && 'this territory is moderated'} /> <SubSelect prependSubs={['pick territory']} className='w-auto d-flex' noForm sub={sub?.name} hint={sub?.moderated && 'this territory is moderated'} />
<div className='mb-3 w-100'>
{sub && <TerritoryDetails sub={sub} />}
</div>
<div>
{postButtons} {postButtons}
</div>
<div className='d-flex mt-4'> <div className='d-flex mt-4'>
<AccordianItem <AccordianItem
headerColor='#6c757d' headerColor='#6c757d'

View File

@ -11,31 +11,8 @@ import Share from './share'
import { gql, useMutation } from '@apollo/client' import { gql, useMutation } from '@apollo/client'
import { useToast } from './toast' import { useToast } from './toast'
export default function TerritoryHeader ({ sub }) { export function TerritoryDetails ({ sub }) {
const me = useMe()
const toaster = useToast()
const [toggleMuteSub] = useMutation(
gql`
mutation toggleMuteSub($name: String!) {
toggleMuteSub(name: $name)
}`, {
update (cache, { data: { toggleMuteSub } }) {
cache.modify({
id: `Sub:{"name":"${sub.name}"}`,
fields: {
meMuteSub: () => toggleMuteSub
}
})
}
}
)
return ( return (
<>
<TerritoryPaymentDue sub={sub} />
<div className='mb-3'>
<div>
<AccordianCard <AccordianCard
header={ header={
<small className='text-muted fw-bold align-items-center d-flex'> <small className='text-muted fw-bold align-items-center d-flex'>
@ -62,6 +39,35 @@ export default function TerritoryHeader ({ sub }) {
<TerritoryBillingLine sub={sub} /> <TerritoryBillingLine sub={sub} />
</CardFooter> </CardFooter>
</AccordianCard> </AccordianCard>
)
}
export default function TerritoryHeader ({ sub }) {
const me = useMe()
const toaster = useToast()
const [toggleMuteSub] = useMutation(
gql`
mutation toggleMuteSub($name: String!) {
toggleMuteSub(name: $name)
}`, {
update (cache, { data: { toggleMuteSub } }) {
cache.modify({
id: `Sub:{"name":"${sub.name}"}`,
fields: {
meMuteSub: () => toggleMuteSub
}
})
}
}
)
return (
<>
<TerritoryPaymentDue sub={sub} />
<div className='mb-3'>
<div>
<TerritoryDetails sub={sub} />
</div> </div>
<div className='d-flex my-2 justify-content-end'> <div className='d-flex my-2 justify-content-end'>
<Share path={`/~${sub.name}`} title={`~${sub.name} stacker news territory`} className='mx-3' /> <Share path={`/~${sub.name}`} title={`~${sub.name} stacker news territory`} className='mx-3' />

View File

@ -1,5 +1,5 @@
import { getGetServerSideProps } from '../../api/ssrApollo' import { getGetServerSideProps } from '../../api/ssrApollo'
import { SUB } from '../../fragments/subs' import { SUB_FULL } from '../../fragments/subs'
import { CenterLayout } from '../../components/layout' import { CenterLayout } from '../../components/layout'
import Post from '../../components/post' import Post from '../../components/post'
import { useQuery } from '@apollo/client' import { useQuery } from '@apollo/client'
@ -7,13 +7,13 @@ import { useRouter } from 'next/router'
import PageLoading from '../../components/page-loading' import PageLoading from '../../components/page-loading'
export const getServerSideProps = getGetServerSideProps({ export const getServerSideProps = getGetServerSideProps({
query: SUB, query: SUB_FULL,
notFound: (data, vars) => vars.sub && !data.sub notFound: (data, vars) => vars.sub && !data.sub
}) })
export default function PostPage ({ ssrData }) { export default function PostPage ({ ssrData }) {
const router = useRouter() const router = useRouter()
const { data } = useQuery(SUB, { variables: { sub: router.query.sub } }) const { data } = useQuery(SUB_FULL, { variables: { sub: router.query.sub } })
if (!data && !ssrData) return <PageLoading /> if (!data && !ssrData) return <PageLoading />
const { sub } = data || ssrData const { sub } = data || ssrData