feat: overhaul admin user management and desktop UX

This commit is contained in:
Esdras Renan 2025-10-13 10:36:38 -03:00
parent 7d6f3bea01
commit ecad81b0ea
16 changed files with 1546 additions and 395 deletions

View file

@ -94,6 +94,18 @@ const styles = StyleSheet.create({
borderWidth: 1,
padding: 18,
},
sectionHeading: {
marginBottom: 12,
backgroundColor: "#FFFFFF",
borderRadius: 12,
borderColor: "#E2E8F0",
borderWidth: 1,
paddingHorizontal: 18,
paddingVertical: 14,
},
cardGroup: {
marginBottom: 20,
},
sectionTitle: {
fontFamily: SEMI_FONT,
fontSize: 13,
@ -149,6 +161,9 @@ const styles = StyleSheet.create({
backgroundColor: "#FFFFFF",
gap: 6,
},
cardSpacing: {
marginTop: 8,
},
cardHeader: {
flexDirection: "row",
justifyContent: "space-between",
@ -451,47 +466,55 @@ function TicketPdfDocument({ ticket, logoDataUrl }: { ticket: TicketWithDetails;
) : null}
{comments.length > 0 ? (
<View style={styles.section}>
<Text style={styles.sectionTitle}>Comentários</Text>
{comments.map((comment) => (
<View key={comment.id} style={styles.card} wrap={false}>
<View style={styles.cardHeader}>
<View>
<Text style={styles.cardTitle}>{comment.author.name}</Text>
<Text style={styles.cardSubtitle}>
{formatDateTime(comment.createdAt)} {comment.visibility === "PUBLIC" ? "Público" : "Interno"}
</Text>
</View>
</View>
<Text style={styles.bodyText}>{comment.safeBody}</Text>
{comment.attachments.length > 0 ? (
<View>
<Text style={styles.cardFooterTitle}>Anexos</Text>
{comment.attachments.map((attachment) => (
<Text key={attachment.id} style={{ fontSize: 9, color: "#475569" }}>
{attachment.name ?? attachment.id}
<>
<View style={styles.sectionHeading}>
<Text style={{ ...styles.sectionTitle, marginBottom: 0 }}>Comentários</Text>
</View>
<View style={styles.cardGroup}>
{comments.map((comment, index) => (
<View key={comment.id} style={[styles.card, index > 0 ? styles.cardSpacing : null]} wrap={false}>
<View style={styles.cardHeader}>
<View>
<Text style={styles.cardTitle}>{comment.author.name}</Text>
<Text style={styles.cardSubtitle}>
{formatDateTime(comment.createdAt)} {comment.visibility === "PUBLIC" ? "Público" : "Interno"}
</Text>
))}
</View>
</View>
) : null}
</View>
))}
</View>
<Text style={styles.bodyText}>{comment.safeBody}</Text>
{comment.attachments.length > 0 ? (
<View>
<Text style={styles.cardFooterTitle}>Anexos</Text>
{comment.attachments.map((attachment) => (
<Text key={attachment.id} style={{ fontSize: 9, color: "#475569" }}>
{attachment.name ?? attachment.id}
</Text>
))}
</View>
) : null}
</View>
))}
</View>
</>
) : null}
{timeline.length > 0 ? (
<View style={styles.section}>
<Text style={styles.sectionTitle}>Linha do tempo</Text>
{timeline.map((event) => (
<View key={event.id} style={[styles.card, styles.timelineCard]} wrap={false}>
<Text style={styles.cardTitle}>{event.label}</Text>
<Text style={styles.cardSubtitle}>{formatDateTime(event.createdAt)}</Text>
{event.description ? (
<Text style={styles.timelineDetails}>{event.description}</Text>
) : null}
</View>
))}
</View>
<>
<View style={styles.sectionHeading}>
<Text style={{ ...styles.sectionTitle, marginBottom: 0 }}>Linha do tempo</Text>
</View>
<View style={styles.cardGroup}>
{timeline.map((event, index) => (
<View key={event.id} style={[styles.card, styles.timelineCard, index > 0 ? styles.cardSpacing : null]} wrap={false}>
<Text style={styles.cardTitle}>{event.label}</Text>
<Text style={styles.cardSubtitle}>{formatDateTime(event.createdAt)}</Text>
{event.description ? (
<Text style={styles.timelineDetails}>{event.description}</Text>
) : null}
</View>
))}
</View>
</>
) : null}
</Page>
</Document>