feat: allow users to use the app icon as the answer icon (#7888)
Co-authored-by: crazywoola <427733928@qq.com>pull/7897/head
parent
6f33351eb3
commit
80aa7c4019
@ -0,0 +1,45 @@
|
|||||||
|
"""add use_icon_as_answer_icon fields for app and site
|
||||||
|
|
||||||
|
Revision ID: 030f4915f36a
|
||||||
|
Revises: d0187d6a88dd
|
||||||
|
Create Date: 2024-09-01 12:55:45.129687
|
||||||
|
|
||||||
|
"""
|
||||||
|
|
||||||
|
import sqlalchemy as sa
|
||||||
|
from alembic import op
|
||||||
|
|
||||||
|
import models as models
|
||||||
|
|
||||||
|
# revision identifiers, used by Alembic.
|
||||||
|
revision = "030f4915f36a"
|
||||||
|
down_revision = "d0187d6a88dd"
|
||||||
|
branch_labels = None
|
||||||
|
depends_on = None
|
||||||
|
|
||||||
|
|
||||||
|
def upgrade():
|
||||||
|
# ### commands auto generated by Alembic - please adjust! ###
|
||||||
|
with op.batch_alter_table("apps", schema=None) as batch_op:
|
||||||
|
batch_op.add_column(
|
||||||
|
sa.Column("use_icon_as_answer_icon", sa.Boolean(), server_default=sa.text("false"), nullable=False)
|
||||||
|
)
|
||||||
|
|
||||||
|
with op.batch_alter_table("sites", schema=None) as batch_op:
|
||||||
|
batch_op.add_column(
|
||||||
|
sa.Column("use_icon_as_answer_icon", sa.Boolean(), server_default=sa.text("false"), nullable=False)
|
||||||
|
)
|
||||||
|
|
||||||
|
# ### end Alembic commands ###
|
||||||
|
|
||||||
|
|
||||||
|
def downgrade():
|
||||||
|
# ### commands auto generated by Alembic - please adjust! ###
|
||||||
|
|
||||||
|
with op.batch_alter_table("sites", schema=None) as batch_op:
|
||||||
|
batch_op.drop_column("use_icon_as_answer_icon")
|
||||||
|
|
||||||
|
with op.batch_alter_table("apps", schema=None) as batch_op:
|
||||||
|
batch_op.drop_column("use_icon_as_answer_icon")
|
||||||
|
|
||||||
|
# ### end Alembic commands ###
|
||||||
@ -0,0 +1,47 @@
|
|||||||
|
'use client'
|
||||||
|
|
||||||
|
import type { FC } from 'react'
|
||||||
|
import { init } from 'emoji-mart'
|
||||||
|
import data from '@emoji-mart/data'
|
||||||
|
import classNames from '@/utils/classnames'
|
||||||
|
import type { AppIconType } from '@/types/app'
|
||||||
|
|
||||||
|
init({ data })
|
||||||
|
|
||||||
|
export type AnswerIconProps = {
|
||||||
|
iconType?: AppIconType | null
|
||||||
|
icon?: string | null
|
||||||
|
background?: string | null
|
||||||
|
imageUrl?: string | null
|
||||||
|
}
|
||||||
|
|
||||||
|
const AnswerIcon: FC<AnswerIconProps> = ({
|
||||||
|
iconType,
|
||||||
|
icon,
|
||||||
|
background,
|
||||||
|
imageUrl,
|
||||||
|
}) => {
|
||||||
|
const wrapperClassName = classNames(
|
||||||
|
'flex',
|
||||||
|
'items-center',
|
||||||
|
'justify-center',
|
||||||
|
'w-full',
|
||||||
|
'h-full',
|
||||||
|
'rounded-full',
|
||||||
|
'border-[0.5px]',
|
||||||
|
'border-black/5',
|
||||||
|
'text-xl',
|
||||||
|
)
|
||||||
|
const isValidImageIcon = iconType === 'image' && imageUrl
|
||||||
|
return <div
|
||||||
|
className={wrapperClassName}
|
||||||
|
style={{ background: background || '#D5F5F6' }}
|
||||||
|
>
|
||||||
|
{isValidImageIcon
|
||||||
|
? <img src={imageUrl} className="w-full h-full rounded-full" alt="answer icon" />
|
||||||
|
: (icon && icon !== '') ? <em-emoji id={icon} /> : <em-emoji id='🤖' />
|
||||||
|
}
|
||||||
|
</div>
|
||||||
|
}
|
||||||
|
|
||||||
|
export default AnswerIcon
|
||||||
Loading…
Reference in New Issue