Show amount of unpaid images in receipt
This commit is contained in:
parent
a8998df4b0
commit
28bde328fc
@ -4,8 +4,8 @@ import { datePivot } from '../../lib/time'
|
|||||||
export default {
|
export default {
|
||||||
Query: {
|
Query: {
|
||||||
imageFees: async (parent, { s3Keys }, { models, me }) => {
|
imageFees: async (parent, { s3Keys }, { models, me }) => {
|
||||||
const [, fees] = await imageFees(s3Keys, { models, me })
|
const { fees, unpaid, size24h, sizeNow } = await imageFees(s3Keys, { models, me })
|
||||||
return fees
|
return { fees, unpaid, size24h, sizeNow }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -39,12 +39,12 @@ export async function imageFees (s3Keys, { models, me }) {
|
|||||||
const unpaidS3Keys = (await models.upload.findMany({ select: { id: true }, where: { id: { in: s3Keys }, paid: false } })).map(({ id }) => id)
|
const unpaidS3Keys = (await models.upload.findMany({ select: { id: true }, where: { id: { in: s3Keys }, paid: false } })).map(({ id }) => id)
|
||||||
const unpaid = unpaidS3Keys.length
|
const unpaid = unpaidS3Keys.length
|
||||||
|
|
||||||
if (!unpaid) return [itemId => [], 0]
|
if (!unpaid) return { queries: itemId => [], fees: 0 }
|
||||||
|
|
||||||
if (!me) {
|
if (!me) {
|
||||||
// anons pay for every new image 100 sats
|
// anons pay for every new image 100 sats
|
||||||
const fees = unpaid * 100
|
const fees = unpaid * 100
|
||||||
return [queries(ANON_USER_ID, unpaidS3Keys, fees), fees]
|
return { queries: queries(ANON_USER_ID, unpaidS3Keys, fees), fees, unpaid }
|
||||||
}
|
}
|
||||||
|
|
||||||
// check how much stacker uploaded in last 24 hours
|
// check how much stacker uploaded in last 24 hours
|
||||||
@ -81,5 +81,5 @@ export async function imageFees (s3Keys, { models, me }) {
|
|||||||
} else {
|
} else {
|
||||||
fees = 10000 * unpaid
|
fees = 10000 * unpaid
|
||||||
}
|
}
|
||||||
return [queries(me.id, unpaidS3Keys, fees), fees]
|
return { queries: queries(me.id, unpaidS3Keys, fees), fees, unpaid, size24h, sizeNow }
|
||||||
}
|
}
|
||||||
|
@ -1091,7 +1091,7 @@ export const updateItem = async (parent, { sub: subName, forward, options, ...it
|
|||||||
item = { subName, userId: me.id, ...item }
|
item = { subName, userId: me.id, ...item }
|
||||||
const fwdUsers = await getForwardUsers(models, forward)
|
const fwdUsers = await getForwardUsers(models, forward)
|
||||||
|
|
||||||
const [imgQueriesFn, imgFees] = await imageFeesFromText(item.text, { models, me })
|
const { queries: imgQueriesFn, fees: imgFees } = await imageFeesFromText(item.text, { models, me })
|
||||||
item = await serializeInvoicable(
|
item = await serializeInvoicable(
|
||||||
[
|
[
|
||||||
models.$queryRawUnsafe(`${SELECT} FROM update_item($1::JSONB, $2::JSONB, $3::JSONB) AS "Item"`,
|
models.$queryRawUnsafe(`${SELECT} FROM update_item($1::JSONB, $2::JSONB, $3::JSONB) AS "Item"`,
|
||||||
@ -1128,7 +1128,7 @@ export const createItem = async (parent, { forward, options, ...item }, { me, mo
|
|||||||
item.url = removeTracking(item.url)
|
item.url = removeTracking(item.url)
|
||||||
}
|
}
|
||||||
|
|
||||||
const [imgQueriesFn, imgFees] = await imageFeesFromText(item.text, { models, me })
|
const { queries: imgQueriesFn, fees: imgFees } = await imageFeesFromText(item.text, { models, me })
|
||||||
const enforceFee = (me ? undefined : (item.parentId ? ANON_COMMENT_FEE : (ANON_POST_FEE + (item.boost || 0)))) + imgFees
|
const enforceFee = (me ? undefined : (item.parentId ? ANON_COMMENT_FEE : (ANON_POST_FEE + (item.boost || 0)))) + imgFees
|
||||||
item = await serializeInvoicable(
|
item = await serializeInvoicable(
|
||||||
models.$queryRawUnsafe(
|
models.$queryRawUnsafe(
|
||||||
|
@ -1,7 +1,13 @@
|
|||||||
import { gql } from 'graphql-tag'
|
import { gql } from 'graphql-tag'
|
||||||
|
|
||||||
export default gql`
|
export default gql`
|
||||||
|
type ImageFees {
|
||||||
|
fees: Int!
|
||||||
|
unpaid: Int
|
||||||
|
sizeNow: Int
|
||||||
|
size24h: Int
|
||||||
|
}
|
||||||
extend type Query {
|
extend type Query {
|
||||||
imageFees(s3Keys: [Int]!): Int!
|
imageFees(s3Keys: [Int]!): ImageFees!
|
||||||
}
|
}
|
||||||
`
|
`
|
||||||
|
@ -22,7 +22,7 @@ function Receipt ({ cost, repetition, imageFees, baseFee, parentId, boost }) {
|
|||||||
</tr>
|
</tr>
|
||||||
{imageFees &&
|
{imageFees &&
|
||||||
<tr>
|
<tr>
|
||||||
<td>+ {numWithUnits(imageFees, { abbreviate: false })}</td>
|
<td>+ {imageFees.unpaid} x {numWithUnits(imageFees.fees, { abbreviate: false })}</td>
|
||||||
<td align='right' className='font-weight-light'>image fees</td>
|
<td align='right' className='font-weight-light'>image fees</td>
|
||||||
</tr>}
|
</tr>}
|
||||||
{repetition > 0 &&
|
{repetition > 0 &&
|
||||||
@ -85,8 +85,8 @@ export default function FeeButton ({ parentId, baseFee, ChildButton, variant, te
|
|||||||
formik?.setFieldValue('cost', cost)
|
formik?.setFieldValue('cost', cost)
|
||||||
}, [formik?.getFieldProps('cost').value, cost])
|
}, [formik?.getFieldProps('cost').value, cost])
|
||||||
|
|
||||||
const imageFees = formik?.getFieldProps('imageFees').value || 0
|
const imageFees = formik?.getFieldProps('imageFees').value || { fees: 0 }
|
||||||
const totalCost = cost + imageFees
|
const totalCost = cost + imageFees.fees
|
||||||
|
|
||||||
const show = alwaysShow || !formik?.isSubmitting
|
const show = alwaysShow || !formik?.isSubmitting
|
||||||
return (
|
return (
|
||||||
@ -137,8 +137,8 @@ export function EditFeeButton ({ paidSats, ChildButton, variant, text, alwaysSho
|
|||||||
formik?.setFieldValue('cost', cost)
|
formik?.setFieldValue('cost', cost)
|
||||||
}, [formik?.getFieldProps('cost').value, cost])
|
}, [formik?.getFieldProps('cost').value, cost])
|
||||||
|
|
||||||
const imageFees = formik?.getFieldProps('imageFees').value || 0
|
const imageFees = formik?.getFieldProps('imageFees').value?.fees || { fees: 0 }
|
||||||
const totalCost = cost + imageFees
|
const totalCost = cost + imageFees.fees
|
||||||
|
|
||||||
const show = alwaysShow || !formik?.isSubmitting
|
const show = alwaysShow || !formik?.isSubmitting
|
||||||
return (
|
return (
|
||||||
|
@ -105,7 +105,12 @@ export function MarkdownInput ({ label, topLevel, groupClassName, onChange, onKe
|
|||||||
const toaster = useToast()
|
const toaster = useToast()
|
||||||
const [updateImageFees] = useLazyQuery(gql`
|
const [updateImageFees] = useLazyQuery(gql`
|
||||||
query imageFees($s3Keys: [Int]!) {
|
query imageFees($s3Keys: [Int]!) {
|
||||||
imageFees(s3Keys: $s3Keys)
|
imageFees(s3Keys: $s3Keys) {
|
||||||
|
fees
|
||||||
|
unpaid
|
||||||
|
size24h
|
||||||
|
sizeNow
|
||||||
|
}
|
||||||
}`, {
|
}`, {
|
||||||
onError: (err) => {
|
onError: (err) => {
|
||||||
console.log(err)
|
console.log(err)
|
||||||
|
@ -234,7 +234,7 @@ export const useInvoiceable = (onSubmit, options = defaultOptions) => {
|
|||||||
const onSubmitWrapper = useCallback(async (formValues, ...submitArgs) => {
|
const onSubmitWrapper = useCallback(async (formValues, ...submitArgs) => {
|
||||||
let { cost, imageFees, amount } = formValues
|
let { cost, imageFees, amount } = formValues
|
||||||
cost ??= amount
|
cost ??= amount
|
||||||
if (imageFees) cost += imageFees
|
if (imageFees?.fees) cost += imageFees.fees
|
||||||
|
|
||||||
// action only allowed if logged in
|
// action only allowed if logged in
|
||||||
if (!me && options.requireSession) {
|
if (!me && options.requireSession) {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user