use gents_derives::TS;
use logisheets_base::BlockId;
use crate::edit_action::{BLOCK_OP_BY_PAYLOAD, BlockOp};
use super::Workbook;
#[derive(Debug, Clone, TS)]
#[ts(file_name = "block_op_for_payload.ts", rename_all = "camelCase")]
pub struct BlockOpForPayload {
pub payload_type: String,
pub op: BlockOp,
}
#[derive(Debug, Clone, TS)]
#[ts(file_name = "block_op_policy.ts", rename_all = "camelCase")]
pub struct BlockOpPolicy {
pub op: BlockOp,
pub policy: String,
pub stated: bool,
}
impl Workbook {
pub fn get_block_op_for_payloads(&self) -> Vec<BlockOpForPayload> {
BLOCK_OP_BY_PAYLOAD
.iter()
.map(|(payload_type, op)| BlockOpForPayload {
payload_type: payload_type.to_string(),
op: *op,
})
.collect()
}
pub fn get_block_op_policies(
&self,
sheet_idx: usize,
block_id: BlockId,
) -> std::result::Result<Vec<BlockOpPolicy>, crate::errors::Error> {
let info = self.get_block_modify_info(sheet_idx, block_id)?;
Ok(BlockOp::ALL
.iter()
.map(|op| {
let explicit = info.permissions.explicit(*op);
BlockOpPolicy {
op: *op,
policy: info
.permissions
.policy_for(*op, info.modify_policy)
.as_wire_str()
.to_string(),
stated: explicit.is_some()
|| info.modify_policy != crate::edit_action::ModifyPolicy::All,
}
})
.collect())
}
}