Hide settings for User, fix users align
This commit is contained in:
parent
b5e2562f20
commit
c5485705a1
@ -16,6 +16,10 @@
|
||||
margin-top: 20px;
|
||||
}
|
||||
|
||||
#users > .usersSection > .usersList > .user > span {
|
||||
width: 25%;
|
||||
}
|
||||
|
||||
#users > .invitationsSection > .invitationsList > .invitation.revoked {
|
||||
color: var(--textLight);
|
||||
}
|
||||
|
@ -501,7 +501,7 @@ impl Model {
|
||||
sender_id: 2,
|
||||
summary: "You have been invited".to_string(),
|
||||
description: "You have been invited to project A".to_string(),
|
||||
message_type: "project-invitation".to_string(),
|
||||
message_type: MessageType::ReceivedInvitation,
|
||||
hyper_link: "/project/1".to_string(),
|
||||
created_at: chrono::NaiveDateTime::from_timestamp(4567890, 123),
|
||||
updated_at: chrono::NaiveDateTime::from_timestamp(1234567, 098),
|
||||
|
@ -42,13 +42,25 @@ pub fn render(model: &Model) -> Node<Msg> {
|
||||
],
|
||||
],
|
||||
};
|
||||
let mut links = vec![
|
||||
let mut links = vec![];
|
||||
|
||||
if model.current_user_role() > UserRole::User {
|
||||
links.push(sidebar_link_item(
|
||||
model,
|
||||
"Project settings",
|
||||
Icon::Settings,
|
||||
Some(Page::ProjectSettings),
|
||||
));
|
||||
}
|
||||
|
||||
links.extend(vec![
|
||||
li![divider()],
|
||||
sidebar_link_item(model, "Releases", Icon::Shipping, None),
|
||||
sidebar_link_item(model, "Issue and Filters", Icon::Issues, None),
|
||||
sidebar_link_item(model, "Pages", Icon::Page, None),
|
||||
sidebar_link_item(model, "Reports", Icon::Reports, None),
|
||||
sidebar_link_item(model, "Components", Icon::Component, None),
|
||||
];
|
||||
]);
|
||||
|
||||
if model.current_user_role() > UserRole::User {
|
||||
links.push(sidebar_link_item(
|
||||
@ -64,13 +76,6 @@ pub fn render(model: &Model) -> Node<Msg> {
|
||||
ul![
|
||||
project_info,
|
||||
sidebar_link_item(model, "Kanban Board", Icon::Board, Some(Page::Project)),
|
||||
sidebar_link_item(
|
||||
model,
|
||||
"Project settings",
|
||||
Icon::Settings,
|
||||
Some(Page::ProjectSettings)
|
||||
),
|
||||
li![divider()],
|
||||
links,
|
||||
]
|
||||
]
|
||||
|
@ -126,7 +126,7 @@ fn messages_tooltip_popup(model: &Model) -> Node<Msg> {
|
||||
} = message;
|
||||
div![
|
||||
class!["message"],
|
||||
class![message_type.as_str()],
|
||||
attrs![At::Class => format!("{}", message_type)],
|
||||
div![class!["summary"], summary],
|
||||
div![class!["description"], description],
|
||||
div![class!["hyperlink"], hyper_link],
|
||||
|
@ -548,6 +548,46 @@ impl From<Issue> for UpdateIssuePayload {
|
||||
}
|
||||
}
|
||||
|
||||
#[cfg_attr(feature = "backend", derive(FromSqlRow, AsExpression))]
|
||||
#[cfg_attr(feature = "backend", sql_type = "MessageTypeType")]
|
||||
#[derive(Clone, Copy, Deserialize, Serialize, Debug, PartialOrd, PartialEq, Hash)]
|
||||
pub enum MessageType {
|
||||
ReceivedInvitation,
|
||||
AssignedToIssue,
|
||||
Mention,
|
||||
}
|
||||
|
||||
impl Into<u32> for MessageType {
|
||||
fn into(self) -> u32 {
|
||||
match self {
|
||||
MessageType::ReceivedInvitation => 0,
|
||||
MessageType::AssignedToIssue => 1,
|
||||
MessageType::Mention => 2,
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
impl Into<MessageType> for u32 {
|
||||
fn into(self) -> MessageType {
|
||||
match self {
|
||||
0 => MessageType::ReceivedInvitation,
|
||||
1 => MessageType::AssignedToIssue,
|
||||
2 => MessageType::Mention,
|
||||
_ => MessageType::Mention,
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
impl std::fmt::Display for MessageType {
|
||||
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
|
||||
match self {
|
||||
MessageType::ReceivedInvitation => f.write_str("ReceivedInvitation"),
|
||||
MessageType::AssignedToIssue => f.write_str("AssignedToIssue"),
|
||||
MessageType::Mention => f.write_str("Mention"),
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#[cfg_attr(feature = "backend", derive(Queryable))]
|
||||
#[derive(Clone, Debug, Serialize, Deserialize, PartialEq)]
|
||||
pub struct Message {
|
||||
@ -556,7 +596,7 @@ pub struct Message {
|
||||
pub sender_id: UserId,
|
||||
pub summary: String,
|
||||
pub description: String,
|
||||
pub message_type: String,
|
||||
pub message_type: MessageType,
|
||||
pub hyper_link: String,
|
||||
pub created_at: NaiveDateTime,
|
||||
pub updated_at: NaiveDateTime,
|
||||
|
@ -2,7 +2,9 @@ use std::io::Write;
|
||||
|
||||
use diesel::{deserialize::*, pg::*, serialize::*, *};
|
||||
|
||||
use crate::{InvitationState, IssuePriority, IssueType, ProjectCategory, TimeTracking, UserRole};
|
||||
use crate::{
|
||||
InvitationState, IssuePriority, IssueType, MessageType, ProjectCategory, TimeTracking, UserRole,
|
||||
};
|
||||
|
||||
#[derive(SqlType)]
|
||||
#[postgres(type_name = "IssuePriorityType")]
|
||||
@ -239,3 +241,43 @@ impl ToSql<TimeTrackingType, Pg> for TimeTracking {
|
||||
Ok(IsNull::No)
|
||||
}
|
||||
}
|
||||
|
||||
#[derive(SqlType)]
|
||||
#[postgres(type_name = "MessageTypeType")]
|
||||
pub struct MessageTypeType;
|
||||
|
||||
impl diesel::query_builder::QueryId for MessageTypeType {
|
||||
type QueryId = MessageType;
|
||||
}
|
||||
|
||||
fn message_type_type_from_sql(bytes: Option<&[u8]>) -> deserialize::Result<MessageType> {
|
||||
match not_none!(bytes) {
|
||||
b"received_invitation" => Ok(MessageType::ReceivedInvitation),
|
||||
b"assigned_to_issue" => Ok(MessageType::AssignedToIssue),
|
||||
b"mention" => Ok(MessageType::Mention),
|
||||
_ => Ok(MessageType::Mention),
|
||||
}
|
||||
}
|
||||
|
||||
impl FromSql<MessageTypeType, Pg> for MessageType {
|
||||
fn from_sql(bytes: Option<&[u8]>) -> deserialize::Result<MessageType> {
|
||||
message_type_type_from_sql(bytes)
|
||||
}
|
||||
}
|
||||
|
||||
impl FromSql<sql_types::Text, Pg> for MessageType {
|
||||
fn from_sql(bytes: Option<&[u8]>) -> deserialize::Result<MessageType> {
|
||||
message_type_type_from_sql(bytes)
|
||||
}
|
||||
}
|
||||
|
||||
impl ToSql<MessageTypeType, Pg> for MessageType {
|
||||
fn to_sql<W: Write>(&self, out: &mut Output<W, Pg>) -> serialize::Result {
|
||||
match *self {
|
||||
MessageType::ReceivedInvitation => out.write_all(b"received_invitation")?,
|
||||
MessageType::AssignedToIssue => out.write_all(b"assigned_to_issue")?,
|
||||
MessageType::Mention => out.write_all(b"mention")?,
|
||||
}
|
||||
Ok(IsNull::No)
|
||||
}
|
||||
}
|
||||
|
@ -0,0 +1,4 @@
|
||||
ALTER TABLE messages
|
||||
ALTER COLUMN message_type
|
||||
SET DATA TYPE text;
|
||||
DROP TYPE "MessageTypeType";
|
@ -0,0 +1,10 @@
|
||||
CREATE TYPE "MessageTypeType" AS ENUM (
|
||||
'received_invitation',
|
||||
'assigned_to_issue',
|
||||
'mention'
|
||||
);
|
||||
|
||||
ALTER TABLE messages
|
||||
ALTER COLUMN message_type
|
||||
SET DATA TYPE "MessageTypeType"
|
||||
USING message_type::text::"MessageTypeType";
|
@ -347,10 +347,10 @@ table! {
|
||||
description -> Text,
|
||||
/// The `message_type` column of the `messages` table.
|
||||
///
|
||||
/// Its SQL type is `Text`.
|
||||
/// Its SQL type is `MessageTypeType`.
|
||||
///
|
||||
/// (Automatically generated by Diesel.)
|
||||
message_type -> Text,
|
||||
message_type -> MessageTypeType,
|
||||
/// The `hyper_link` column of the `messages` table.
|
||||
///
|
||||
/// Its SQL type is `Text`.
|
||||
|
Loading…
Reference in New Issue
Block a user